\doxysection{range.\+hpp}
\hypertarget{range_8hpp_source}{}\label{range_8hpp_source}\index{ginkgo/core/base/range.hpp@{ginkgo/core/base/range.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\_BASE\_RANGE\_HPP\_}}
\DoxyCodeLine{00006\ \textcolor{preprocessor}{\#define\ GKO\_PUBLIC\_CORE\_BASE\_RANGE\_HPP\_}}
\DoxyCodeLine{00007\ }
\DoxyCodeLine{00008\ }
\DoxyCodeLine{00009\ \textcolor{preprocessor}{\#include\ <type\_traits>}}
\DoxyCodeLine{00010\ }
\DoxyCodeLine{00011\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/math.hpp>}}
\DoxyCodeLine{00012\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/types.hpp>}}
\DoxyCodeLine{00013\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/utils.hpp>}}
\DoxyCodeLine{00014\ }
\DoxyCodeLine{00015\ }
\DoxyCodeLine{00016\ \textcolor{keyword}{namespace\ }\doxymbox{\hyperlink{namespacegko}{gko}}\ \{}
\DoxyCodeLine{00017\ }
\DoxyCodeLine{00018\ }
\DoxyCodeLine{00046\ \textcolor{keyword}{struct\ }\doxymbox{\hyperlink{structgko_1_1span_a2aafb0414ef14fac91296066f7426d6d}{span}}\ \{}
\DoxyCodeLine{00054\ \ \ \ \ GKO\_ATTRIBUTES\ \textcolor{keyword}{constexpr}\ \doxymbox{\hyperlink{structgko_1_1span_a2aafb0414ef14fac91296066f7426d6d}{span}}(\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ point)\ noexcept}
\DoxyCodeLine{00055\ \ \ \ \ \ \ \ \ :\ \doxymbox{\hyperlink{structgko_1_1span_a2aafb0414ef14fac91296066f7426d6d}{span}}\{point,\ point\ +\ 1\}}
\DoxyCodeLine{00056\ \ \ \ \ \{\}}
\DoxyCodeLine{00057\ }
\DoxyCodeLine{00064\ \ \ \ \ GKO\_ATTRIBUTES\ \textcolor{keyword}{constexpr}\ \doxymbox{\hyperlink{structgko_1_1span_a1566e1ab67312a6b9ece66fa4f5c8799}{span}}(\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ \doxymbox{\hyperlink{structgko_1_1span_a54ff06eda27a98b62e83c7e9e7b6dcd7}{begin}},\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ \doxymbox{\hyperlink{structgko_1_1span_af68200dea4456e1bd3511c3b14bc2886}{end}})\ noexcept}
\DoxyCodeLine{00065\ \ \ \ \ \ \ \ \ :\ \doxymbox{\hyperlink{structgko_1_1span_a54ff06eda27a98b62e83c7e9e7b6dcd7}{begin}}\{\doxymbox{\hyperlink{structgko_1_1span_a54ff06eda27a98b62e83c7e9e7b6dcd7}{begin}}\},\ \doxymbox{\hyperlink{structgko_1_1span_af68200dea4456e1bd3511c3b14bc2886}{end}}\{\doxymbox{\hyperlink{structgko_1_1span_af68200dea4456e1bd3511c3b14bc2886}{end}}\}}
\DoxyCodeLine{00066\ \ \ \ \ \{\}}
\DoxyCodeLine{00067\ }
\DoxyCodeLine{00073\ \ \ \ \ GKO\_ATTRIBUTES\ \textcolor{keyword}{constexpr}\ \textcolor{keywordtype}{bool}\ \doxymbox{\hyperlink{structgko_1_1span_a32a87f434708e6857820858503f9b133}{is\_valid}}()\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ \doxymbox{\hyperlink{structgko_1_1span_a54ff06eda27a98b62e83c7e9e7b6dcd7}{begin}}\ <=\ \doxymbox{\hyperlink{structgko_1_1span_af68200dea4456e1bd3511c3b14bc2886}{end}};\ \}}
\DoxyCodeLine{00074\ }
\DoxyCodeLine{00080\ \ \ \ \ GKO\_ATTRIBUTES\ \textcolor{keyword}{constexpr}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ \doxymbox{\hyperlink{structgko_1_1span_a4e869a36bebf78c090a0c2219f47c419}{length}}()\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ \doxymbox{\hyperlink{structgko_1_1span_af68200dea4456e1bd3511c3b14bc2886}{end}}\ -\/\ \doxymbox{\hyperlink{structgko_1_1span_a54ff06eda27a98b62e83c7e9e7b6dcd7}{begin}};\ \}}
\DoxyCodeLine{00081\ }
\DoxyCodeLine{00085\ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ \doxymbox{\hyperlink{structgko_1_1span_a54ff06eda27a98b62e83c7e9e7b6dcd7}{begin}};}
\DoxyCodeLine{00086\ }
\DoxyCodeLine{00090\ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ \doxymbox{\hyperlink{structgko_1_1span_af68200dea4456e1bd3511c3b14bc2886}{end}};}
\DoxyCodeLine{00091\ \};}
\DoxyCodeLine{00092\ }
\DoxyCodeLine{00093\ }
\DoxyCodeLine{00094\ GKO\_ATTRIBUTES\ GKO\_INLINE\ \textcolor{keyword}{constexpr}\ \textcolor{keywordtype}{bool}\ operator<(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{structgko_1_1span}{span}}\&\ first,}
\DoxyCodeLine{00095\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{structgko_1_1span}{span}}\&\ second)}
\DoxyCodeLine{00096\ \{}
\DoxyCodeLine{00097\ \ \ \ \ \textcolor{keywordflow}{return}\ first.\doxymbox{\hyperlink{structgko_1_1span_af68200dea4456e1bd3511c3b14bc2886}{end}}\ <\ second.\doxymbox{\hyperlink{structgko_1_1span_a54ff06eda27a98b62e83c7e9e7b6dcd7}{begin}};}
\DoxyCodeLine{00098\ \}}
\DoxyCodeLine{00099\ }
\DoxyCodeLine{00100\ }
\DoxyCodeLine{00101\ GKO\_ATTRIBUTES\ GKO\_INLINE\ \textcolor{keyword}{constexpr}\ \textcolor{keywordtype}{bool}\ operator<=(\textcolor{keyword}{const}\ span\&\ first,}
\DoxyCodeLine{00102\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ span\&\ second)}
\DoxyCodeLine{00103\ \{}
\DoxyCodeLine{00104\ \ \ \ \ \textcolor{keywordflow}{return}\ first.end\ <=\ second.begin;}
\DoxyCodeLine{00105\ \}}
\DoxyCodeLine{00106\ }
\DoxyCodeLine{00107\ }
\DoxyCodeLine{00108\ GKO\_ATTRIBUTES\ GKO\_INLINE\ \textcolor{keyword}{constexpr}\ \textcolor{keywordtype}{bool}\ operator>(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{structgko_1_1span}{span}}\&\ first,}
\DoxyCodeLine{00109\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{structgko_1_1span}{span}}\&\ second)}
\DoxyCodeLine{00110\ \{}
\DoxyCodeLine{00111\ \ \ \ \ \textcolor{keywordflow}{return}\ second\ <\ first;}
\DoxyCodeLine{00112\ \}}
\DoxyCodeLine{00113\ }
\DoxyCodeLine{00114\ }
\DoxyCodeLine{00115\ GKO\_ATTRIBUTES\ GKO\_INLINE\ \textcolor{keyword}{constexpr}\ \textcolor{keywordtype}{bool}\ operator>=(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{structgko_1_1span}{span}}\&\ first,}
\DoxyCodeLine{00116\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{structgko_1_1span}{span}}\&\ second)}
\DoxyCodeLine{00117\ \{}
\DoxyCodeLine{00118\ \ \ \ \ \textcolor{keywordflow}{return}\ second\ <=\ first;}
\DoxyCodeLine{00119\ \}}
\DoxyCodeLine{00120\ }
\DoxyCodeLine{00121\ }
\DoxyCodeLine{00122\ GKO\_ATTRIBUTES\ GKO\_INLINE\ \textcolor{keyword}{constexpr}\ \textcolor{keywordtype}{bool}\ operator==(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{structgko_1_1span}{span}}\&\ first,}
\DoxyCodeLine{00123\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{structgko_1_1span}{span}}\&\ second)}
\DoxyCodeLine{00124\ \{}
\DoxyCodeLine{00125\ \ \ \ \ \textcolor{keywordflow}{return}\ first.begin\ ==\ second.begin\ \&\&\ first.end\ ==\ second.end;}
\DoxyCodeLine{00126\ \}}
\DoxyCodeLine{00127\ }
\DoxyCodeLine{00128\ }
\DoxyCodeLine{00129\ GKO\_ATTRIBUTES\ GKO\_INLINE\ \textcolor{keyword}{constexpr}\ \textcolor{keywordtype}{bool}\ operator!=(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{structgko_1_1span}{span}}\&\ first,}
\DoxyCodeLine{00130\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{structgko_1_1span}{span}}\&\ second)}
\DoxyCodeLine{00131\ \{}
\DoxyCodeLine{00132\ \ \ \ \ \textcolor{keywordflow}{return}\ !(first\ ==\ second);}
\DoxyCodeLine{00133\ \}}
\DoxyCodeLine{00134\ }
\DoxyCodeLine{00138\ \textcolor{keyword}{struct\ }\doxymbox{\hyperlink{structgko_1_1local__span}{local\_span}}\ :\ \doxymbox{\hyperlink{structgko_1_1local__span_a2aafb0414ef14fac91296066f7426d6d}{span}}\ \{}
\DoxyCodeLine{00139\ \ \ \ \ \textcolor{keyword}{using\ }\doxymbox{\hyperlink{structgko_1_1span_a2aafb0414ef14fac91296066f7426d6d}{span::span}};}
\DoxyCodeLine{00140\ \};}
\DoxyCodeLine{00141\ }
\DoxyCodeLine{00142\ }
\DoxyCodeLine{00143\ \textcolor{keyword}{namespace\ }detail\ \{}
\DoxyCodeLine{00144\ }
\DoxyCodeLine{00145\ }
\DoxyCodeLine{00146\ \textcolor{keyword}{template}\ <\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ CurrentDimension\ =\ 0,\ \textcolor{keyword}{typename}\ FirstRange,}
\DoxyCodeLine{00147\ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{typename}\ SecondRange>}
\DoxyCodeLine{00148\ GKO\_ATTRIBUTES\ \textcolor{keyword}{constexpr}\ GKO\_INLINE}
\DoxyCodeLine{00149\ \ \ \ \ std::enable\_if\_t<(CurrentDimension\ >=\ \doxymbox{\hyperlink{namespacegko_af1812df45c6ec07780d579a12b64c753}{max}}(FirstRange::dimensionality,}
\DoxyCodeLine{00150\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ SecondRange::dimensionality)),}
\DoxyCodeLine{00151\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{bool}>}
\DoxyCodeLine{00152\ \ \ \ \ equal\_dimensions(\textcolor{keyword}{const}\ FirstRange\&,\ \textcolor{keyword}{const}\ SecondRange\&)}
\DoxyCodeLine{00153\ \{}
\DoxyCodeLine{00154\ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{keyword}{true};}
\DoxyCodeLine{00155\ \}}
\DoxyCodeLine{00156\ }
\DoxyCodeLine{00157\ \textcolor{keyword}{template}\ <\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ CurrentDimension\ =\ 0,\ \textcolor{keyword}{typename}\ FirstRange,}
\DoxyCodeLine{00158\ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{typename}\ SecondRange>}
\DoxyCodeLine{00159\ GKO\_ATTRIBUTES\ \textcolor{keyword}{constexpr}\ GKO\_INLINE}
\DoxyCodeLine{00160\ \ \ \ \ std::enable\_if\_t<(CurrentDimension\ <\ \doxymbox{\hyperlink{namespacegko_af1812df45c6ec07780d579a12b64c753}{max}}(FirstRange::dimensionality,}
\DoxyCodeLine{00161\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ SecondRange::dimensionality)),}
\DoxyCodeLine{00162\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{bool}>}
\DoxyCodeLine{00163\ \ \ \ \ equal\_dimensions(\textcolor{keyword}{const}\ FirstRange\&\ first,\ \textcolor{keyword}{const}\ SecondRange\&\ second)}
\DoxyCodeLine{00164\ \{}
\DoxyCodeLine{00165\ \ \ \ \ \textcolor{keywordflow}{return}\ first.length(CurrentDimension)\ ==\ second.length(CurrentDimension)\ \&\&}
\DoxyCodeLine{00166\ \ \ \ \ \ \ \ \ \ \ \ equal\_dimensions<CurrentDimension\ +\ 1>(first,\ second);}
\DoxyCodeLine{00167\ \}}
\DoxyCodeLine{00168\ }
\DoxyCodeLine{00173\ \textcolor{keyword}{template}\ <\textcolor{keyword}{class}...>}
\DoxyCodeLine{00174\ \textcolor{keyword}{struct\ }head;}
\DoxyCodeLine{00175\ }
\DoxyCodeLine{00179\ \textcolor{keyword}{template}\ <\textcolor{keyword}{class\ }First,\ \textcolor{keyword}{class}...\ Rest>}
\DoxyCodeLine{00180\ \textcolor{keyword}{struct\ }head<First,\ Rest...>\ \{}
\DoxyCodeLine{00181\ \ \ \ \ \textcolor{keyword}{using\ }type\ =\ First;}
\DoxyCodeLine{00182\ \};}
\DoxyCodeLine{00183\ }
\DoxyCodeLine{00187\ \textcolor{keyword}{template}\ <\textcolor{keyword}{class}...\ T>}
\DoxyCodeLine{00188\ \textcolor{keyword}{using\ }head\_t\ =\ \textcolor{keyword}{typename}\ head<T...>::type;}
\DoxyCodeLine{00189\ }
\DoxyCodeLine{00190\ }
\DoxyCodeLine{00191\ \}\ \ \textcolor{comment}{//\ namespace\ detail}}
\DoxyCodeLine{00192\ }
\DoxyCodeLine{00193\ }
\DoxyCodeLine{00303\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ Accessor>}
\DoxyCodeLine{00304\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1range_aede7a11a0eef2b73cabe44c9c2ad8246}{range}}\ \{}
\DoxyCodeLine{00305\ \textcolor{keyword}{public}:}
\DoxyCodeLine{00309\ \ \ \ \ \textcolor{keyword}{using\ }\doxymbox{\hyperlink{classgko_1_1range_a3332728e51dadcf6517847cef3000a17}{accessor}}\ =\ Accessor;}
\DoxyCodeLine{00310\ }
\DoxyCodeLine{00314\ \ \ \ \ \textcolor{keyword}{static}\ \textcolor{keyword}{constexpr}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ \doxymbox{\hyperlink{classgko_1_1range_a6796721a162561502474e3150f179167}{dimensionality}}\ =\ \doxymbox{\hyperlink{classgko_1_1accessor_1_1row__major_ae969fbac55f5ba6e6f95f25a0aac483d}{accessor::dimensionality}};}
\DoxyCodeLine{00315\ }
\DoxyCodeLine{00319\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1range_a8c8f2ca9dcaf25ca52fbf21fc7bb8a94}{\string~range}}()\ =\ \textcolor{keywordflow}{default};}
\DoxyCodeLine{00320\ }
\DoxyCodeLine{00329\ \ \ \ \ \textcolor{keyword}{template}\ <}
\DoxyCodeLine{00330\ \ \ \ \ \ \ \ \ \textcolor{keyword}{typename}...\ AccessorParams,}
\DoxyCodeLine{00331\ \ \ \ \ \ \ \ \ \textcolor{keyword}{typename}\ =\ std::enable\_if\_t<}
\DoxyCodeLine{00332\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{sizeof}...(AccessorParams)\ !=\ 1\ ||}
\DoxyCodeLine{00333\ \ \ \ \ \ \ \ \ \ \ \ \ !std::is\_same<}
\DoxyCodeLine{00334\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1range_aede7a11a0eef2b73cabe44c9c2ad8246}{range}},\ std::decay<detail::head\_t<AccessorParams...>>>::value>>}
\DoxyCodeLine{00335\ \ \ \ \ GKO\_ATTRIBUTES\ \textcolor{keyword}{constexpr}\ \textcolor{keyword}{explicit}\ \doxymbox{\hyperlink{classgko_1_1range_aede7a11a0eef2b73cabe44c9c2ad8246}{range}}(AccessorParams\&\&...\ params)}
\DoxyCodeLine{00336\ \ \ \ \ \ \ \ \ :\ accessor\_\{std::forward<AccessorParams>(params)...\}}
\DoxyCodeLine{00337\ \ \ \ \ \{\}}
\DoxyCodeLine{00338\ }
\DoxyCodeLine{00351\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}...\ DimensionTypes>}
\DoxyCodeLine{00352\ \ \ \ \ GKO\_ATTRIBUTES\ \textcolor{keyword}{constexpr}\ \textcolor{keyword}{auto}\ \doxymbox{\hyperlink{classgko_1_1range_a3ac230f10fa217dbb46475ea38243573}{operator()}}(DimensionTypes\&\&...\ dimensions)}
\DoxyCodeLine{00353\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ -\/>\ \textcolor{keyword}{decltype}(std::declval<accessor>()(}
\DoxyCodeLine{00354\ \ \ \ \ \ \ \ \ \ \ \ \ std::forward<DimensionTypes>(dimensions)...))}
\DoxyCodeLine{00355\ \ \ \ \ \{}
\DoxyCodeLine{00356\ \ \ \ \ \ \ \ \ \textcolor{keyword}{static\_assert}(\textcolor{keyword}{sizeof}...(DimensionTypes)\ <=\ \doxymbox{\hyperlink{classgko_1_1range_a6796721a162561502474e3150f179167}{dimensionality}},}
\DoxyCodeLine{00357\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}Too\ many\ dimensions\ in\ range\ call"{}});}
\DoxyCodeLine{00358\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ accessor\_(std::forward<DimensionTypes>(dimensions)...);}
\DoxyCodeLine{00359\ \ \ \ \ \}}
\DoxyCodeLine{00360\ }
\DoxyCodeLine{00369\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ OtherAccessor>}
\DoxyCodeLine{00370\ \ \ \ \ GKO\_ATTRIBUTES\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1range_aede7a11a0eef2b73cabe44c9c2ad8246}{range}}\&\ \doxymbox{\hyperlink{classgko_1_1range_aa123ae2beed0437d501e2dbde8177c18}{operator=}}(}
\DoxyCodeLine{00371\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1range_aede7a11a0eef2b73cabe44c9c2ad8246}{range<OtherAccessor>}}\&\ other)\textcolor{keyword}{\ const}}
\DoxyCodeLine{00372\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{00373\ \ \ \ \ \ \ \ \ GKO\_ASSERT(detail::equal\_dimensions(*\textcolor{keyword}{this},\ other));}
\DoxyCodeLine{00374\ \ \ \ \ \ \ \ \ accessor\_.copy\_from(other);}
\DoxyCodeLine{00375\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ *\textcolor{keyword}{this};}
\DoxyCodeLine{00376\ \ \ \ \ \}}
\DoxyCodeLine{00377\ }
\DoxyCodeLine{00391\ \ \ \ \ GKO\_ATTRIBUTES\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1range_aede7a11a0eef2b73cabe44c9c2ad8246}{range}}\&\ \doxymbox{\hyperlink{classgko_1_1range_a70f8019357a268b3f97df7b11712d424}{operator=}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1range_aede7a11a0eef2b73cabe44c9c2ad8246}{range}}\&\ other)\textcolor{keyword}{\ const}}
\DoxyCodeLine{00392\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{00393\ \ \ \ \ \ \ \ \ GKO\_ASSERT(detail::equal\_dimensions(*\textcolor{keyword}{this},\ other));}
\DoxyCodeLine{00394\ \ \ \ \ \ \ \ \ accessor\_.copy\_from(other.get\_accessor());}
\DoxyCodeLine{00395\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ *\textcolor{keyword}{this};}
\DoxyCodeLine{00396\ \ \ \ \ \}}
\DoxyCodeLine{00397\ }
\DoxyCodeLine{00398\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1range_aede7a11a0eef2b73cabe44c9c2ad8246}{range}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1range}{range}}\&\ other)\ =\ \textcolor{keywordflow}{default};}
\DoxyCodeLine{00399\ }
\DoxyCodeLine{00407\ \ \ \ \ GKO\_ATTRIBUTES\ \textcolor{keyword}{constexpr}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ \doxymbox{\hyperlink{classgko_1_1range_a3ac8b238c377da9cc05d7c728efabfc8}{length}}(\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ dimension)\textcolor{keyword}{\ const}}
\DoxyCodeLine{00408\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{00409\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ accessor\_.length(dimension);}
\DoxyCodeLine{00410\ \ \ \ \ \}}
\DoxyCodeLine{00411\ }
\DoxyCodeLine{00419\ \ \ \ \ GKO\_ATTRIBUTES\ \textcolor{keyword}{constexpr}\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1range_a3332728e51dadcf6517847cef3000a17}{accessor}}*\ \doxymbox{\hyperlink{classgko_1_1range_a5b8e0d6f908ab8a486746e4acf8b025e}{operator-\/>}}()\ const\ noexcept}
\DoxyCodeLine{00420\ \ \ \ \ \{}
\DoxyCodeLine{00421\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \&accessor\_;}
\DoxyCodeLine{00422\ \ \ \ \ \}}
\DoxyCodeLine{00423\ }
\DoxyCodeLine{00429\ \ \ \ \ GKO\_ATTRIBUTES\ \textcolor{keyword}{constexpr}\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_1_1accessor}{accessor}}\&\ get\_accessor()\ const\ noexcept}
\DoxyCodeLine{00430\ \ \ \ \ \{}
\DoxyCodeLine{00431\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ accessor\_;}
\DoxyCodeLine{00432\ \ \ \ \ \}}
\DoxyCodeLine{00433\ }
\DoxyCodeLine{00434\ \textcolor{keyword}{private}:}
\DoxyCodeLine{00435\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1range_a3332728e51dadcf6517847cef3000a17}{accessor}}\ accessor\_;}
\DoxyCodeLine{00436\ \};}
\DoxyCodeLine{00437\ }
\DoxyCodeLine{00438\ }
\DoxyCodeLine{00439\ \textcolor{comment}{//\ implementation\ of\ range\ operations\ follows}}
\DoxyCodeLine{00440\ \textcolor{comment}{//\ (you\ probably\ should\ not\ have\ to\ look\ at\ this\ unless\ you're\ interested\ in\ the}}
\DoxyCodeLine{00441\ \textcolor{comment}{//\ gory\ details)}}
\DoxyCodeLine{00442\ }
\DoxyCodeLine{00443\ }
\DoxyCodeLine{00444\ \textcolor{keyword}{namespace\ }detail\ \{}
\DoxyCodeLine{00445\ }
\DoxyCodeLine{00446\ }
\DoxyCodeLine{00447\ \textcolor{keyword}{enum\ class}\ operation\_kind\ \{\ range\_by\_range,\ scalar\_by\_range,\ range\_by\_scalar\ \};}
\DoxyCodeLine{00448\ }
\DoxyCodeLine{00449\ }
\DoxyCodeLine{00450\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ Accessor,\ \textcolor{keyword}{typename}\ Operation>}
\DoxyCodeLine{00451\ \textcolor{keyword}{struct\ }implement\_unary\_operation\ \{}
\DoxyCodeLine{00452\ \ \ \ \ \textcolor{keyword}{using\ }accessor\ =\ Accessor;}
\DoxyCodeLine{00453\ \ \ \ \ \textcolor{keyword}{static}\ \textcolor{keyword}{constexpr}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ dimensionality\ =\ accessor::dimensionality;}
\DoxyCodeLine{00454\ }
\DoxyCodeLine{00455\ \ \ \ \ GKO\_ATTRIBUTES\ \textcolor{keyword}{constexpr}\ \textcolor{keyword}{explicit}\ implement\_unary\_operation(}
\DoxyCodeLine{00456\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ Accessor\&\ operand)}
\DoxyCodeLine{00457\ \ \ \ \ \ \ \ \ :\ operand\{operand\}}
\DoxyCodeLine{00458\ \ \ \ \ \{\}}
\DoxyCodeLine{00459\ }
\DoxyCodeLine{00460\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}...\ DimensionTypes>}
\DoxyCodeLine{00461\ \ \ \ \ GKO\_ATTRIBUTES\ \textcolor{keyword}{constexpr}\ \textcolor{keyword}{auto}\ operator()(}
\DoxyCodeLine{00462\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ DimensionTypes\&...\ dimensions)\ \textcolor{keyword}{const}}
\DoxyCodeLine{00463\ \ \ \ \ \ \ \ \ -\/>\ \textcolor{keyword}{decltype}(Operation::evaluate(std::declval<accessor>(),}
\DoxyCodeLine{00464\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ dimensions...))}
\DoxyCodeLine{00465\ \ \ \ \ \{}
\DoxyCodeLine{00466\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ Operation::evaluate(operand,\ dimensions...);}
\DoxyCodeLine{00467\ \ \ \ \ \}}
\DoxyCodeLine{00468\ }
\DoxyCodeLine{00469\ \ \ \ \ GKO\_ATTRIBUTES\ \textcolor{keyword}{constexpr}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ length(\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ dimension)\textcolor{keyword}{\ const}}
\DoxyCodeLine{00470\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{00471\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ operand.length(dimension);}
\DoxyCodeLine{00472\ \ \ \ \ \}}
\DoxyCodeLine{00473\ }
\DoxyCodeLine{00474\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ OtherAccessor>}
\DoxyCodeLine{00475\ \ \ \ \ GKO\_ATTRIBUTES\ \textcolor{keywordtype}{void}\ copy\_from(\textcolor{keyword}{const}\ OtherAccessor\&\ other)\ \textcolor{keyword}{const}\ =\ \textcolor{keyword}{delete};}
\DoxyCodeLine{00476\ }
\DoxyCodeLine{00477\ \ \ \ \ \textcolor{keyword}{const}\ accessor\ operand;}
\DoxyCodeLine{00478\ \};}
\DoxyCodeLine{00479\ }
\DoxyCodeLine{00480\ }
\DoxyCodeLine{00481\ \textcolor{keyword}{template}\ <operation\_kind\ Kind,\ \textcolor{keyword}{typename}\ FirstOperand,\ \textcolor{keyword}{typename}\ SecondOperand,}
\DoxyCodeLine{00482\ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{typename}\ Operation>}
\DoxyCodeLine{00483\ \textcolor{keyword}{struct\ }implement\_binary\_operation\ \{\};}
\DoxyCodeLine{00484\ }
\DoxyCodeLine{00485\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ FirstAccessor,\ \textcolor{keyword}{typename}\ SecondAccessor,\ \textcolor{keyword}{typename}\ Operation>}
\DoxyCodeLine{00486\ \textcolor{keyword}{struct\ }implement\_binary\_operation<operation\_kind::range\_by\_range,\ FirstAccessor,}
\DoxyCodeLine{00487\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ SecondAccessor,\ Operation>\ \{}
\DoxyCodeLine{00488\ \ \ \ \ \textcolor{keyword}{using\ }first\_accessor\ =\ FirstAccessor;}
\DoxyCodeLine{00489\ \ \ \ \ \textcolor{keyword}{using\ }second\_accessor\ =\ SecondAccessor;}
\DoxyCodeLine{00490\ \ \ \ \ \textcolor{keyword}{static\_assert}(first\_accessor::dimensionality\ ==}
\DoxyCodeLine{00491\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ second\_accessor::dimensionality,}
\DoxyCodeLine{00492\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}Both\ ranges\ need\ to\ have\ the\ same\ number\ of\ dimensions"{}});}
\DoxyCodeLine{00493\ \ \ \ \ \textcolor{keyword}{static}\ \textcolor{keyword}{constexpr}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ dimensionality\ =\ first\_accessor::dimensionality;}
\DoxyCodeLine{00494\ }
\DoxyCodeLine{00495\ \ \ \ \ GKO\_ATTRIBUTES\ \textcolor{keyword}{explicit}\ implement\_binary\_operation(}
\DoxyCodeLine{00496\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ FirstAccessor\&\ first,\ \textcolor{keyword}{const}\ SecondAccessor\&\ second)}
\DoxyCodeLine{00497\ \ \ \ \ \ \ \ \ :\ first\{first\},\ second\{second\}}
\DoxyCodeLine{00498\ \ \ \ \ \{}
\DoxyCodeLine{00499\ \ \ \ \ \ \ \ \ GKO\_ASSERT(gko::detail::equal\_dimensions(first,\ second));}
\DoxyCodeLine{00500\ \ \ \ \ \}}
\DoxyCodeLine{00501\ }
\DoxyCodeLine{00502\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}...\ DimensionTypes>}
\DoxyCodeLine{00503\ \ \ \ \ GKO\_ATTRIBUTES\ \textcolor{keyword}{constexpr}\ \textcolor{keyword}{auto}\ operator()(}
\DoxyCodeLine{00504\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ DimensionTypes\&...\ dimensions)\ \textcolor{keyword}{const}}
\DoxyCodeLine{00505\ \ \ \ \ \ \ \ \ -\/>\ \textcolor{keyword}{decltype}(Operation::evaluate\_range\_by\_range(}
\DoxyCodeLine{00506\ \ \ \ \ \ \ \ \ \ \ \ \ std::declval<first\_accessor>(),\ std::declval<second\_accessor>(),}
\DoxyCodeLine{00507\ \ \ \ \ \ \ \ \ \ \ \ \ dimensions...))}
\DoxyCodeLine{00508\ \ \ \ \ \{}
\DoxyCodeLine{00509\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ Operation::evaluate\_range\_by\_range(first,\ second,\ dimensions...);}
\DoxyCodeLine{00510\ \ \ \ \ \}}
\DoxyCodeLine{00511\ }
\DoxyCodeLine{00512\ \ \ \ \ GKO\_ATTRIBUTES\ \textcolor{keyword}{constexpr}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ length(\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ dimension)\textcolor{keyword}{\ const}}
\DoxyCodeLine{00513\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{00514\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ first.length(dimension);}
\DoxyCodeLine{00515\ \ \ \ \ \}}
\DoxyCodeLine{00516\ }
\DoxyCodeLine{00517\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ OtherAccessor>}
\DoxyCodeLine{00518\ \ \ \ \ GKO\_ATTRIBUTES\ \textcolor{keywordtype}{void}\ copy\_from(\textcolor{keyword}{const}\ OtherAccessor\&\ other)\ \textcolor{keyword}{const}\ =\ \textcolor{keyword}{delete};}
\DoxyCodeLine{00519\ }
\DoxyCodeLine{00520\ \ \ \ \ \textcolor{keyword}{const}\ first\_accessor\ first;}
\DoxyCodeLine{00521\ \ \ \ \ \textcolor{keyword}{const}\ second\_accessor\ second;}
\DoxyCodeLine{00522\ \};}
\DoxyCodeLine{00523\ }
\DoxyCodeLine{00524\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ FirstOperand,\ \textcolor{keyword}{typename}\ SecondAccessor,\ \textcolor{keyword}{typename}\ Operation>}
\DoxyCodeLine{00525\ \textcolor{keyword}{struct\ }implement\_binary\_operation<operation\_kind::scalar\_by\_range,\ FirstOperand,}
\DoxyCodeLine{00526\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ SecondAccessor,\ Operation>\ \{}
\DoxyCodeLine{00527\ \ \ \ \ \textcolor{keyword}{using\ }second\_accessor\ =\ SecondAccessor;}
\DoxyCodeLine{00528\ \ \ \ \ \textcolor{keyword}{static}\ \textcolor{keyword}{constexpr}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ dimensionality\ =\ second\_accessor::dimensionality;}
\DoxyCodeLine{00529\ }
\DoxyCodeLine{00530\ \ \ \ \ GKO\_ATTRIBUTES\ \textcolor{keyword}{constexpr}\ \textcolor{keyword}{explicit}\ implement\_binary\_operation(}
\DoxyCodeLine{00531\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ FirstOperand\&\ first,\ \textcolor{keyword}{const}\ SecondAccessor\&\ second)}
\DoxyCodeLine{00532\ \ \ \ \ \ \ \ \ :\ first\{first\},\ second\{second\}}
\DoxyCodeLine{00533\ \ \ \ \ \{\}}
\DoxyCodeLine{00534\ }
\DoxyCodeLine{00535\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}...\ DimensionTypes>}
\DoxyCodeLine{00536\ \ \ \ \ GKO\_ATTRIBUTES\ \textcolor{keyword}{constexpr}\ \textcolor{keyword}{auto}\ operator()(}
\DoxyCodeLine{00537\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ DimensionTypes\&...\ dimensions)\ \textcolor{keyword}{const}}
\DoxyCodeLine{00538\ \ \ \ \ \ \ \ \ -\/>\ \textcolor{keyword}{decltype}(Operation::evaluate\_scalar\_by\_range(}
\DoxyCodeLine{00539\ \ \ \ \ \ \ \ \ \ \ \ \ std::declval<FirstOperand>(),\ std::declval<second\_accessor>(),}
\DoxyCodeLine{00540\ \ \ \ \ \ \ \ \ \ \ \ \ dimensions...))}
\DoxyCodeLine{00541\ \ \ \ \ \{}
\DoxyCodeLine{00542\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ Operation::evaluate\_scalar\_by\_range(first,\ second,}
\DoxyCodeLine{00543\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ dimensions...);}
\DoxyCodeLine{00544\ \ \ \ \ \}}
\DoxyCodeLine{00545\ }
\DoxyCodeLine{00546\ \ \ \ \ GKO\_ATTRIBUTES\ \textcolor{keyword}{constexpr}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ length(\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ dimension)\textcolor{keyword}{\ const}}
\DoxyCodeLine{00547\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{00548\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ second.length(dimension);}
\DoxyCodeLine{00549\ \ \ \ \ \}}
\DoxyCodeLine{00550\ }
\DoxyCodeLine{00551\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ OtherAccessor>}
\DoxyCodeLine{00552\ \ \ \ \ GKO\_ATTRIBUTES\ \textcolor{keywordtype}{void}\ copy\_from(\textcolor{keyword}{const}\ OtherAccessor\&\ other)\ \textcolor{keyword}{const}\ =\ \textcolor{keyword}{delete};}
\DoxyCodeLine{00553\ }
\DoxyCodeLine{00554\ \ \ \ \ \textcolor{keyword}{const}\ FirstOperand\ first;}
\DoxyCodeLine{00555\ \ \ \ \ \textcolor{keyword}{const}\ second\_accessor\ second;}
\DoxyCodeLine{00556\ \};}
\DoxyCodeLine{00557\ }
\DoxyCodeLine{00558\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ FirstAccessor,\ \textcolor{keyword}{typename}\ SecondOperand,\ \textcolor{keyword}{typename}\ Operation>}
\DoxyCodeLine{00559\ \textcolor{keyword}{struct\ }implement\_binary\_operation<operation\_kind::range\_by\_scalar,}
\DoxyCodeLine{00560\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ FirstAccessor,\ SecondOperand,\ Operation>\ \{}
\DoxyCodeLine{00561\ \ \ \ \ \textcolor{keyword}{using\ }first\_accessor\ =\ FirstAccessor;}
\DoxyCodeLine{00562\ \ \ \ \ \textcolor{keyword}{static}\ \textcolor{keyword}{constexpr}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ dimensionality\ =\ first\_accessor::dimensionality;}
\DoxyCodeLine{00563\ }
\DoxyCodeLine{00564\ \ \ \ \ GKO\_ATTRIBUTES\ \textcolor{keyword}{constexpr}\ \textcolor{keyword}{explicit}\ implement\_binary\_operation(}
\DoxyCodeLine{00565\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ FirstAccessor\&\ first,\ \textcolor{keyword}{const}\ SecondOperand\&\ second)}
\DoxyCodeLine{00566\ \ \ \ \ \ \ \ \ :\ first\{first\},\ second\{second\}}
\DoxyCodeLine{00567\ \ \ \ \ \{\}}
\DoxyCodeLine{00568\ }
\DoxyCodeLine{00569\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}...\ DimensionTypes>}
\DoxyCodeLine{00570\ \ \ \ \ GKO\_ATTRIBUTES\ \textcolor{keyword}{constexpr}\ \textcolor{keyword}{auto}\ operator()(}
\DoxyCodeLine{00571\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ DimensionTypes\&...\ dimensions)\ \textcolor{keyword}{const}}
\DoxyCodeLine{00572\ \ \ \ \ \ \ \ \ -\/>\ \textcolor{keyword}{decltype}(Operation::evaluate\_range\_by\_scalar(}
\DoxyCodeLine{00573\ \ \ \ \ \ \ \ \ \ \ \ \ std::declval<first\_accessor>(),\ std::declval<SecondOperand>(),}
\DoxyCodeLine{00574\ \ \ \ \ \ \ \ \ \ \ \ \ dimensions...))}
\DoxyCodeLine{00575\ \ \ \ \ \{}
\DoxyCodeLine{00576\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ Operation::evaluate\_range\_by\_scalar(first,\ second,}
\DoxyCodeLine{00577\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ dimensions...);}
\DoxyCodeLine{00578\ \ \ \ \ \}}
\DoxyCodeLine{00579\ }
\DoxyCodeLine{00580\ \ \ \ \ GKO\_ATTRIBUTES\ \textcolor{keyword}{constexpr}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ length(\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ dimension)\textcolor{keyword}{\ const}}
\DoxyCodeLine{00581\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{00582\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ first.length(dimension);}
\DoxyCodeLine{00583\ \ \ \ \ \}}
\DoxyCodeLine{00584\ }
\DoxyCodeLine{00585\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ OtherAccessor>}
\DoxyCodeLine{00586\ \ \ \ \ GKO\_ATTRIBUTES\ \textcolor{keywordtype}{void}\ copy\_from(\textcolor{keyword}{const}\ OtherAccessor\&\ other)\ \textcolor{keyword}{const}\ =\ \textcolor{keyword}{delete};}
\DoxyCodeLine{00587\ }
\DoxyCodeLine{00588\ \ \ \ \ \textcolor{keyword}{const}\ first\_accessor\ first;}
\DoxyCodeLine{00589\ \ \ \ \ \textcolor{keyword}{const}\ SecondOperand\ second;}
\DoxyCodeLine{00590\ \};}
\DoxyCodeLine{00591\ }
\DoxyCodeLine{00592\ }
\DoxyCodeLine{00593\ \}\ \ \textcolor{comment}{//\ namespace\ detail}}
\DoxyCodeLine{00594\ }
\DoxyCodeLine{00595\ \textcolor{preprocessor}{\#define\ GKO\_DEPRECATED\_UNARY\_RANGE\_OPERATION(\_operation\_deprecated\_name,\ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00596\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \_operation\_name)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00597\ \textcolor{preprocessor}{\ \ \ \ namespace\ accessor\ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00598\ \textcolor{preprocessor}{\ \ \ \ template\ <typename\ Operand>\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00599\ \textcolor{preprocessor}{\ \ \ \ struct\ GKO\_DEPRECATED("{}Please\ use\ "{}\ \#\_operation\_name)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00600\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \_operation\_deprecated\_name\ :\ \_operation\_name<Operand>\ \{\};\ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00601\ \textcolor{preprocessor}{\ \ \ \ \}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00602\ \textcolor{preprocessor}{\ \ \ \ static\_assert(true,\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00603\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}This\ assert\ is\ used\ to\ counter\ the\ false\ positive\ extra\ "{}\ \(\backslash\)}}
\DoxyCodeLine{00604\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}semi-\/colon\ warnings"{})}}
\DoxyCodeLine{00605\ }
\DoxyCodeLine{00606\ }
\DoxyCodeLine{00607\ \textcolor{preprocessor}{\#define\ GKO\_ENABLE\_UNARY\_RANGE\_OPERATION(\_operation\_name,\ \_operator\_name,\ \(\backslash\)}}
\DoxyCodeLine{00608\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \_operator)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00609\ \textcolor{preprocessor}{\ \ \ \ namespace\ accessor\ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00610\ \textcolor{preprocessor}{\ \ \ \ template\ <typename\ Operand>\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00611\ \textcolor{preprocessor}{\ \ \ \ struct\ \_operation\_name\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00612\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ :\ ::gko::detail::implement\_unary\_operation<Operand,\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00613\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ::gko::\_operator>\ \{\ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00614\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ using\ ::gko::detail::implement\_unary\_operation<\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00615\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ Operand,\ ::gko::\_operator>::implement\_unary\_operation;\ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00616\ \textcolor{preprocessor}{\ \ \ \ \};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00617\ \textcolor{preprocessor}{\ \ \ \ \}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00618\ \textcolor{preprocessor}{\ \ \ \ GKO\_BIND\_UNARY\_RANGE\_OPERATION\_TO\_OPERATOR(\_operation\_name,\ \_operator\_name)}}
\DoxyCodeLine{00619\ }
\DoxyCodeLine{00620\ }
\DoxyCodeLine{00621\ \textcolor{preprocessor}{\#define\ GKO\_BIND\_UNARY\_RANGE\_OPERATION\_TO\_OPERATOR(\_operation\_name,\ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00622\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \_operator\_name)\ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00623\ \textcolor{preprocessor}{\ \ \ \ template\ <typename\ Accessor>\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00624\ \textcolor{preprocessor}{\ \ \ \ GKO\_ATTRIBUTES\ constexpr\ GKO\_INLINE\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00625\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ range<accessor::\_operation\_name<Accessor>>\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00626\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \_operator\_name(const\ range<Accessor>\&\ operand)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00627\ \textcolor{preprocessor}{\ \ \ \ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00628\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ return\ range<accessor::\_operation\_name<Accessor>>(\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00629\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ operand.get\_accessor());\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00630\ \textcolor{preprocessor}{\ \ \ \ \}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00631\ \textcolor{preprocessor}{\ \ \ \ static\_assert(true,\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00632\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}This\ assert\ is\ used\ to\ counter\ the\ false\ positive\ extra\ "{}\ \(\backslash\)}}
\DoxyCodeLine{00633\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}semi-\/colon\ warnings"{})}}
\DoxyCodeLine{00634\ }
\DoxyCodeLine{00635\ }
\DoxyCodeLine{00636\ \textcolor{preprocessor}{\#define\ GKO\_DEFINE\_SIMPLE\_UNARY\_OPERATION(\_name,\ ...)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00637\ \textcolor{preprocessor}{\ \ \ \ struct\ \_name\ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00638\ \textcolor{preprocessor}{\ \ \ \ private:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00639\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ template\ <typename\ Operand>\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00640\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ GKO\_ATTRIBUTES\ static\ constexpr\ auto\ simple\_evaluate\_impl(\ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00641\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ const\ Operand\&\ operand)\ -\/>\ decltype(\_\_VA\_ARGS\_\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00642\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00643\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ return\ \_\_VA\_ARGS\_\_;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00644\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00645\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00646\ \textcolor{preprocessor}{\ \ \ \ public:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00647\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ template\ <typename\ AccessorType,\ typename...\ DimensionTypes>\ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00648\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ GKO\_ATTRIBUTES\ static\ constexpr\ auto\ evaluate(\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00649\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ const\ AccessorType\&\ accessor,\ const\ DimensionTypes\&...\ dimensions)\ \(\backslash\)}}
\DoxyCodeLine{00650\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ -\/>\ decltype(simple\_evaluate\_impl(accessor(dimensions...)))\ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00651\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00652\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ return\ simple\_evaluate\_impl(accessor(dimensions...));\ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00653\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00654\ \textcolor{preprocessor}{\ \ \ \ \}}}
\DoxyCodeLine{00655\ }
\DoxyCodeLine{00656\ }
\DoxyCodeLine{00657\ \textcolor{keyword}{namespace\ }\doxymbox{\hyperlink{namespacegko_1_1accessor}{accessor}}\ \{}
\DoxyCodeLine{00658\ \textcolor{keyword}{namespace\ }detail\ \{}
\DoxyCodeLine{00659\ }
\DoxyCodeLine{00660\ }
\DoxyCodeLine{00661\ \textcolor{comment}{//\ unary\ arithmetic}}
\DoxyCodeLine{00662\ GKO\_DEFINE\_SIMPLE\_UNARY\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1unary__plus}{unary\_plus}},\ +operand);}
\DoxyCodeLine{00663\ GKO\_DEFINE\_SIMPLE\_UNARY\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1unary__minus}{unary\_minus}},\ -\/operand);}
\DoxyCodeLine{00664\ }
\DoxyCodeLine{00665\ \textcolor{comment}{//\ unary\ logical}}
\DoxyCodeLine{00666\ GKO\_DEFINE\_SIMPLE\_UNARY\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1logical__not}{logical\_not}},\ !operand);}
\DoxyCodeLine{00667\ }
\DoxyCodeLine{00668\ \textcolor{comment}{//\ unary\ bitwise}}
\DoxyCodeLine{00669\ GKO\_DEFINE\_SIMPLE\_UNARY\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1bitwise__not}{bitwise\_not}},\ \string~(operand));}
\DoxyCodeLine{00670\ }
\DoxyCodeLine{00671\ \textcolor{comment}{//\ common\ functions}}
\DoxyCodeLine{00672\ GKO\_DEFINE\_SIMPLE\_UNARY\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1zero__operation}{zero\_operation}},\ \doxymbox{\hyperlink{namespacegko_a70dbe01ff95c7b953d3d737424c6feb5}{zero}}(operand));}
\DoxyCodeLine{00673\ GKO\_DEFINE\_SIMPLE\_UNARY\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1one__operation}{one\_operation}},\ \doxymbox{\hyperlink{namespacegko_a0059e27f8f4bc348ff65c1e60caf47c8}{one}}(operand));}
\DoxyCodeLine{00674\ GKO\_DEFINE\_SIMPLE\_UNARY\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1abs__operation}{abs\_operation}},\ \doxymbox{\hyperlink{namespacegko_a0cb7d0ece3444fcf3a7ebd82e1cb0a69}{abs}}(operand));}
\DoxyCodeLine{00675\ GKO\_DEFINE\_SIMPLE\_UNARY\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1real__operation}{real\_operation}},\ \doxymbox{\hyperlink{namespacegko_af21648097306adbabc6234b4609ce297}{real}}(operand));}
\DoxyCodeLine{00676\ GKO\_DEFINE\_SIMPLE\_UNARY\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1imag__operation}{imag\_operation}},\ \doxymbox{\hyperlink{namespacegko_a795f649e3744fbfe128aec0b0f928aaa}{imag}}(operand));}
\DoxyCodeLine{00677\ GKO\_DEFINE\_SIMPLE\_UNARY\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1conj__operation}{conj\_operation}},\ \doxymbox{\hyperlink{namespacegko_ad79fd5c1fb85403796c40c0a916a15f2}{conj}}(operand));}
\DoxyCodeLine{00678\ GKO\_DEFINE\_SIMPLE\_UNARY\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1squared__norm__operation}{squared\_norm\_operation}},}
\DoxyCodeLine{00679\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_abbb55709b10d707b2cbef803832aa834}{squared\_norm}}(operand));}
\DoxyCodeLine{00680\ }
\DoxyCodeLine{00681\ \}\ \ \textcolor{comment}{//\ namespace\ detail}}
\DoxyCodeLine{00682\ \}\ \ \textcolor{comment}{//\ namespace\ accessor}}
\DoxyCodeLine{00683\ }
\DoxyCodeLine{00684\ }
\DoxyCodeLine{00685\ \textcolor{comment}{//\ unary\ arithmetic}}
\DoxyCodeLine{00686\ GKO\_ENABLE\_UNARY\_RANGE\_OPERATION(unary\_plus,\ \textcolor{keyword}{operator}+,}
\DoxyCodeLine{00687\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ accessor::detail::unary\_plus);}
\DoxyCodeLine{00688\ GKO\_ENABLE\_UNARY\_RANGE\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1unary__minus}{unary\_minus}},\ \textcolor{keyword}{operator}-\/,}
\DoxyCodeLine{00689\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ accessor::detail::unary\_minus);}
\DoxyCodeLine{00690\ }
\DoxyCodeLine{00691\ \textcolor{comment}{//\ unary\ logical}}
\DoxyCodeLine{00692\ GKO\_ENABLE\_UNARY\_RANGE\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1logical__not}{logical\_not}},\ \textcolor{keyword}{operator}!,}
\DoxyCodeLine{00693\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ accessor::detail::logical\_not);}
\DoxyCodeLine{00694\ }
\DoxyCodeLine{00695\ \textcolor{comment}{//\ unary\ bitwise}}
\DoxyCodeLine{00696\ GKO\_ENABLE\_UNARY\_RANGE\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1bitwise__not}{bitwise\_not}},\ \textcolor{keyword}{operator}\string~,}
\DoxyCodeLine{00697\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ accessor::detail::bitwise\_not);}
\DoxyCodeLine{00698\ }
\DoxyCodeLine{00699\ \textcolor{comment}{//\ common\ unary\ functions}}
\DoxyCodeLine{00700\ }
\DoxyCodeLine{00701\ GKO\_ENABLE\_UNARY\_RANGE\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1zero__operation}{zero\_operation}},\ \doxymbox{\hyperlink{namespacegko_a70dbe01ff95c7b953d3d737424c6feb5}{zero}},}
\DoxyCodeLine{00702\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ accessor::detail::zero\_operation);}
\DoxyCodeLine{00703\ GKO\_ENABLE\_UNARY\_RANGE\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1one__operation}{one\_operation}},\ \doxymbox{\hyperlink{namespacegko_a0059e27f8f4bc348ff65c1e60caf47c8}{one}},}
\DoxyCodeLine{00704\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ accessor::detail::one\_operation);}
\DoxyCodeLine{00705\ GKO\_ENABLE\_UNARY\_RANGE\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1abs__operation}{abs\_operation}},\ \doxymbox{\hyperlink{namespacegko_a0cb7d0ece3444fcf3a7ebd82e1cb0a69}{abs}},}
\DoxyCodeLine{00706\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ accessor::detail::abs\_operation);}
\DoxyCodeLine{00707\ GKO\_ENABLE\_UNARY\_RANGE\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1real__operation}{real\_operation}},\ \doxymbox{\hyperlink{namespacegko_af21648097306adbabc6234b4609ce297}{real}},}
\DoxyCodeLine{00708\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ accessor::detail::real\_operation);}
\DoxyCodeLine{00709\ GKO\_ENABLE\_UNARY\_RANGE\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1imag__operation}{imag\_operation}},\ \doxymbox{\hyperlink{namespacegko_a795f649e3744fbfe128aec0b0f928aaa}{imag}},}
\DoxyCodeLine{00710\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ accessor::detail::imag\_operation);}
\DoxyCodeLine{00711\ GKO\_ENABLE\_UNARY\_RANGE\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1conj__operation}{conj\_operation}},\ \doxymbox{\hyperlink{namespacegko_ad79fd5c1fb85403796c40c0a916a15f2}{conj}},}
\DoxyCodeLine{00712\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ accessor::detail::conj\_operation);}
\DoxyCodeLine{00713\ GKO\_ENABLE\_UNARY\_RANGE\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1squared__norm__operation}{squared\_norm\_operation}},\ \doxymbox{\hyperlink{namespacegko_abbb55709b10d707b2cbef803832aa834}{squared\_norm}},}
\DoxyCodeLine{00714\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ accessor::detail::squared\_norm\_operation);}
\DoxyCodeLine{00715\ }
\DoxyCodeLine{00716\ GKO\_DEPRECATED\_UNARY\_RANGE\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1one__operaton}{one\_operaton}},\ \doxymbox{\hyperlink{structgko_1_1accessor_1_1one__operation}{one\_operation}});}
\DoxyCodeLine{00717\ GKO\_DEPRECATED\_UNARY\_RANGE\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1abs__operaton}{abs\_operaton}},\ \doxymbox{\hyperlink{structgko_1_1accessor_1_1abs__operation}{abs\_operation}});}
\DoxyCodeLine{00718\ GKO\_DEPRECATED\_UNARY\_RANGE\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1real__operaton}{real\_operaton}},\ \doxymbox{\hyperlink{structgko_1_1accessor_1_1real__operation}{real\_operation}});}
\DoxyCodeLine{00719\ GKO\_DEPRECATED\_UNARY\_RANGE\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1imag__operaton}{imag\_operaton}},\ \doxymbox{\hyperlink{structgko_1_1accessor_1_1imag__operation}{imag\_operation}});}
\DoxyCodeLine{00720\ GKO\_DEPRECATED\_UNARY\_RANGE\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1conj__operaton}{conj\_operaton}},\ \doxymbox{\hyperlink{structgko_1_1accessor_1_1conj__operation}{conj\_operation}});}
\DoxyCodeLine{00721\ GKO\_DEPRECATED\_UNARY\_RANGE\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1squared__norm__operaton}{squared\_norm\_operaton}},}
\DoxyCodeLine{00722\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{structgko_1_1accessor_1_1squared__norm__operation}{squared\_norm\_operation}});}
\DoxyCodeLine{00723\ }
\DoxyCodeLine{00724\ \textcolor{keyword}{namespace\ }\doxymbox{\hyperlink{namespacegko_1_1accessor}{accessor}}\ \{}
\DoxyCodeLine{00725\ }
\DoxyCodeLine{00726\ }
\DoxyCodeLine{00727\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ Accessor>}
\DoxyCodeLine{00728\ \textcolor{keyword}{struct\ }transpose\_operation\ \{}
\DoxyCodeLine{00729\ \ \ \ \ \textcolor{keyword}{using\ }accessor\ =\ Accessor;}
\DoxyCodeLine{00730\ \ \ \ \ \textcolor{keyword}{static}\ \textcolor{keyword}{constexpr}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ dimensionality\ =\ accessor::dimensionality;}
\DoxyCodeLine{00731\ }
\DoxyCodeLine{00732\ \ \ \ \ GKO\_ATTRIBUTES\ \textcolor{keyword}{constexpr}\ \textcolor{keyword}{explicit}\ transpose\_operation(}
\DoxyCodeLine{00733\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ Accessor\&\ operand)}
\DoxyCodeLine{00734\ \ \ \ \ \ \ \ \ :\ operand\{operand\}}
\DoxyCodeLine{00735\ \ \ \ \ \{\}}
\DoxyCodeLine{00736\ }
\DoxyCodeLine{00737\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ FirstDimensionType,\ \textcolor{keyword}{typename}\ SecondDimensionType,}
\DoxyCodeLine{00738\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{typename}...\ DimensionTypes>}
\DoxyCodeLine{00739\ \ \ \ \ GKO\_ATTRIBUTES\ \textcolor{keyword}{constexpr}\ \textcolor{keyword}{auto}\ operator()(}
\DoxyCodeLine{00740\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ FirstDimensionType\&\ first\_dim,}
\DoxyCodeLine{00741\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ SecondDimensionType\&\ second\_dim,}
\DoxyCodeLine{00742\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ DimensionTypes\&...\ dims)\ \textcolor{keyword}{const}}
\DoxyCodeLine{00743\ \ \ \ \ \ \ \ \ -\/>\ \textcolor{keyword}{decltype}(std::declval<accessor>()(second\_dim,\ first\_dim,\ dims...))}
\DoxyCodeLine{00744\ \ \ \ \ \{}
\DoxyCodeLine{00745\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ operand(second\_dim,\ first\_dim,\ dims...);}
\DoxyCodeLine{00746\ \ \ \ \ \}}
\DoxyCodeLine{00747\ }
\DoxyCodeLine{00748\ \ \ \ \ GKO\_ATTRIBUTES\ \textcolor{keyword}{constexpr}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ length(\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ dimension)\textcolor{keyword}{\ const}}
\DoxyCodeLine{00749\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{00750\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ dimension\ <\ 2\ ?\ operand.length(dimension\ \string^\ 1)}
\DoxyCodeLine{00751\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ :\ operand.length(dimension);}
\DoxyCodeLine{00752\ \ \ \ \ \}}
\DoxyCodeLine{00753\ }
\DoxyCodeLine{00754\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ OtherAccessor>}
\DoxyCodeLine{00755\ \ \ \ \ GKO\_ATTRIBUTES\ \textcolor{keywordtype}{void}\ copy\_from(\textcolor{keyword}{const}\ OtherAccessor\&\ other)\ \textcolor{keyword}{const}\ =\ \textcolor{keyword}{delete};}
\DoxyCodeLine{00756\ }
\DoxyCodeLine{00757\ \ \ \ \ \textcolor{keyword}{const}\ accessor\ operand;}
\DoxyCodeLine{00758\ \};}
\DoxyCodeLine{00759\ }
\DoxyCodeLine{00760\ }
\DoxyCodeLine{00761\ \}\ \ \textcolor{comment}{//\ namespace\ accessor}}
\DoxyCodeLine{00762\ }
\DoxyCodeLine{00763\ }
\DoxyCodeLine{00764\ GKO\_BIND\_UNARY\_RANGE\_OPERATION\_TO\_OPERATOR(transpose\_operation,\ \doxymbox{\hyperlink{namespacegko_aacad7f87b38d3f26674ed034d442a1a0}{transpose}});}
\DoxyCodeLine{00765\ }
\DoxyCodeLine{00766\ }
\DoxyCodeLine{00767\ \textcolor{preprocessor}{\#undef\ GKO\_DEPRECATED\_UNARY\_RANGE\_OPERATION}}
\DoxyCodeLine{00768\ \textcolor{preprocessor}{\#undef\ GKO\_DEFINE\_SIMPLE\_UNARY\_OPERATION}}
\DoxyCodeLine{00769\ \textcolor{preprocessor}{\#undef\ GKO\_ENABLE\_UNARY\_RANGE\_OPERATION}}
\DoxyCodeLine{00770\ }
\DoxyCodeLine{00771\ }
\DoxyCodeLine{00772\ \textcolor{preprocessor}{\#define\ GKO\_ENABLE\_BINARY\_RANGE\_OPERATION(\_operation\_name,\ \_operator\_name,\ \ \ \(\backslash\)}}
\DoxyCodeLine{00773\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \_operator)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00774\ \textcolor{preprocessor}{\ \ \ \ namespace\ accessor\ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00775\ \textcolor{preprocessor}{\ \ \ \ template\ <::gko::detail::operation\_kind\ Kind,\ typename\ FirstOperand,\ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00776\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ typename\ SecondOperand>\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00777\ \textcolor{preprocessor}{\ \ \ \ struct\ \_operation\_name\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00778\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ :\ ::gko::detail::implement\_binary\_operation<\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00779\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ Kind,\ FirstOperand,\ SecondOperand,\ ::gko::\_operator>\ \{\ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00780\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ using\ ::gko::detail::implement\_binary\_operation<\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00781\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ Kind,\ FirstOperand,\ SecondOperand,\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00782\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ ::gko::\_operator>::implement\_binary\_operation;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00783\ \textcolor{preprocessor}{\ \ \ \ \};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00784\ \textcolor{preprocessor}{\ \ \ \ \}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00785\ \textcolor{preprocessor}{\ \ \ \ GKO\_BIND\_RANGE\_OPERATION\_TO\_OPERATOR(\_operation\_name,\ \_operator\_name);\ \ \ \(\backslash\)}}
\DoxyCodeLine{00786\ \textcolor{preprocessor}{\ \ \ \ static\_assert(true,\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00787\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}This\ assert\ is\ used\ to\ counter\ the\ false\ positive\ extra\ "{}\ \(\backslash\)}}
\DoxyCodeLine{00788\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}semi-\/colon\ warnings"{})}}
\DoxyCodeLine{00789\ }
\DoxyCodeLine{00790\ }
\DoxyCodeLine{00791\ \textcolor{preprocessor}{\#define\ GKO\_BIND\_RANGE\_OPERATION\_TO\_OPERATOR(\_operation\_name,\ \_operator\_name)\ \(\backslash\)}}
\DoxyCodeLine{00792\ \textcolor{preprocessor}{\ \ \ \ template\ <typename\ Accessor>\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00793\ \textcolor{preprocessor}{\ \ \ \ GKO\_ATTRIBUTES\ constexpr\ GKO\_INLINE\ range<accessor::\_operation\_name<\ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00794\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ ::gko::detail::operation\_kind::range\_by\_range,\ Accessor,\ Accessor>>\ \ \ \(\backslash\)}}
\DoxyCodeLine{00795\ \textcolor{preprocessor}{\ \ \ \ \_operator\_name(const\ range<Accessor>\&\ first,\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00796\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ const\ range<Accessor>\&\ second)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00797\ \textcolor{preprocessor}{\ \ \ \ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00798\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ return\ range<accessor::\_operation\_name<\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00799\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ ::gko::detail::operation\_kind::range\_by\_range,\ Accessor,\ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00800\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ Accessor>>(first.get\_accessor(),\ second.get\_accessor());\ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00801\ \textcolor{preprocessor}{\ \ \ \ \}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00802\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00803\ \textcolor{preprocessor}{\ \ \ \ template\ <typename\ FirstAccessor,\ typename\ SecondAccessor>\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00804\ \textcolor{preprocessor}{\ \ \ \ GKO\_ATTRIBUTES\ constexpr\ GKO\_INLINE\ range<accessor::\_operation\_name<\ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00805\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ ::gko::detail::operation\_kind::range\_by\_range,\ FirstAccessor,\ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00806\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ SecondAccessor>>\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00807\ \textcolor{preprocessor}{\ \ \ \ \_operator\_name(const\ range<FirstAccessor>\&\ first,\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00808\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ const\ range<SecondAccessor>\&\ second)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00809\ \textcolor{preprocessor}{\ \ \ \ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00810\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ return\ range<accessor::\_operation\_name<\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00811\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ ::gko::detail::operation\_kind::range\_by\_range,\ FirstAccessor,\ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00812\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ SecondAccessor>>(first.get\_accessor(),\ second.get\_accessor());\ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00813\ \textcolor{preprocessor}{\ \ \ \ \}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00814\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00815\ \textcolor{preprocessor}{\ \ \ \ template\ <typename\ FirstAccessor,\ typename\ SecondOperand>\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00816\ \textcolor{preprocessor}{\ \ \ \ GKO\_ATTRIBUTES\ constexpr\ GKO\_INLINE\ range<accessor::\_operation\_name<\ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00817\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ ::gko::detail::operation\_kind::range\_by\_scalar,\ FirstAccessor,\ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00818\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ SecondOperand>>\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00819\ \textcolor{preprocessor}{\ \ \ \ \_operator\_name(const\ range<FirstAccessor>\&\ first,\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00820\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ const\ SecondOperand\&\ second)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00821\ \textcolor{preprocessor}{\ \ \ \ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00822\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ return\ range<accessor::\_operation\_name<\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00823\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ ::gko::detail::operation\_kind::range\_by\_scalar,\ FirstAccessor,\ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00824\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ SecondOperand>>(first.get\_accessor(),\ second);\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00825\ \textcolor{preprocessor}{\ \ \ \ \}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00826\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00827\ \textcolor{preprocessor}{\ \ \ \ template\ <typename\ FirstOperand,\ typename\ SecondAccessor>\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00828\ \textcolor{preprocessor}{\ \ \ \ GKO\_ATTRIBUTES\ constexpr\ GKO\_INLINE\ range<accessor::\_operation\_name<\ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00829\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ ::gko::detail::operation\_kind::scalar\_by\_range,\ FirstOperand,\ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00830\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ SecondAccessor>>\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00831\ \textcolor{preprocessor}{\ \ \ \ \_operator\_name(const\ FirstOperand\&\ first,\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00832\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ const\ range<SecondAccessor>\&\ second)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00833\ \textcolor{preprocessor}{\ \ \ \ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00834\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ return\ range<accessor::\_operation\_name<\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00835\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ ::gko::detail::operation\_kind::scalar\_by\_range,\ FirstOperand,\ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00836\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ SecondAccessor>>(first,\ second.get\_accessor());\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00837\ \textcolor{preprocessor}{\ \ \ \ \}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00838\ \textcolor{preprocessor}{\ \ \ \ static\_assert(true,\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00839\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}This\ assert\ is\ used\ to\ counter\ the\ false\ positive\ extra\ "{}\ \ \(\backslash\)}}
\DoxyCodeLine{00840\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}semi-\/colon\ warnings"{})}}
\DoxyCodeLine{00841\ }
\DoxyCodeLine{00842\ }
\DoxyCodeLine{00843\ \textcolor{preprocessor}{\#define\ GKO\_DEPRECATED\_SIMPLE\_BINARY\_OPERATION(\_deprecated\_name,\ \_name)\ \(\backslash\)}}
\DoxyCodeLine{00844\ \textcolor{preprocessor}{\ \ \ \ struct\ GKO\_DEPRECATED("{}Please\ use\ "{}\ \#\_name)\ \_deprecated\_name\ :\ \_name\ \{\}}}
\DoxyCodeLine{00845\ }
\DoxyCodeLine{00846\ \textcolor{preprocessor}{\#define\ GKO\_DEFINE\_SIMPLE\_BINARY\_OPERATION(\_name,\ ...)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00847\ \textcolor{preprocessor}{\ \ \ \ struct\ \_name\ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00848\ \textcolor{preprocessor}{\ \ \ \ private:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00849\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ template\ <typename\ FirstOperand,\ typename\ SecondOperand>\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00850\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ GKO\_ATTRIBUTES\ constexpr\ static\ auto\ simple\_evaluate\_impl(\ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00851\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ const\ FirstOperand\&\ first,\ const\ SecondOperand\&\ second)\ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00852\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ -\/>\ decltype(\_\_VA\_ARGS\_\_)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00853\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00854\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ return\ \_\_VA\_ARGS\_\_;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00855\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00856\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00857\ \textcolor{preprocessor}{\ \ \ \ public:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00858\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ template\ <typename\ FirstAccessor,\ typename\ SecondAccessor,\ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00859\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ typename...\ DimensionTypes>\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00860\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ GKO\_ATTRIBUTES\ static\ constexpr\ auto\ evaluate\_range\_by\_range(\ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00861\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ const\ FirstAccessor\&\ first,\ const\ SecondAccessor\&\ second,\ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00862\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ const\ DimensionTypes\&...\ dims)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00863\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ -\/>\ decltype(simple\_evaluate\_impl(first(dims...),\ second(dims...)))\ \(\backslash\)}}
\DoxyCodeLine{00864\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00865\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ return\ simple\_evaluate\_impl(first(dims...),\ second(dims...));\ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00866\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00867\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00868\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ template\ <typename\ FirstOperand,\ typename\ SecondAccessor,\ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00869\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ typename...\ DimensionTypes>\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00870\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ GKO\_ATTRIBUTES\ static\ constexpr\ auto\ evaluate\_scalar\_by\_range(\ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00871\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ const\ FirstOperand\&\ first,\ const\ SecondAccessor\&\ second,\ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00872\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ const\ DimensionTypes\&...\ dims)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00873\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ -\/>\ decltype(simple\_evaluate\_impl(first,\ second(dims...)))\ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00874\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00875\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ return\ simple\_evaluate\_impl(first,\ second(dims...));\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00876\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00877\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00878\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ template\ <typename\ FirstAccessor,\ typename\ SecondOperand,\ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00879\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ typename...\ DimensionTypes>\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00880\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ GKO\_ATTRIBUTES\ static\ constexpr\ auto\ evaluate\_range\_by\_scalar(\ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00881\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ const\ FirstAccessor\&\ first,\ const\ SecondOperand\&\ second,\ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00882\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ const\ DimensionTypes\&...\ dims)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00883\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ -\/>\ decltype(simple\_evaluate\_impl(first(dims...),\ second))\ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00884\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00885\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ return\ simple\_evaluate\_impl(first(dims...),\ second);\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00886\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00887\ \textcolor{preprocessor}{\ \ \ \ \}}}
\DoxyCodeLine{00888\ }
\DoxyCodeLine{00889\ }
\DoxyCodeLine{00890\ \textcolor{keyword}{namespace\ }\doxymbox{\hyperlink{namespacegko_1_1accessor}{accessor}}\ \{}
\DoxyCodeLine{00891\ \textcolor{keyword}{namespace\ }detail\ \{}
\DoxyCodeLine{00892\ }
\DoxyCodeLine{00893\ }
\DoxyCodeLine{00894\ \textcolor{comment}{//\ binary\ arithmetic}}
\DoxyCodeLine{00895\ GKO\_DEFINE\_SIMPLE\_BINARY\_OPERATION(add,\ first\ +\ second);}
\DoxyCodeLine{00896\ GKO\_DEFINE\_SIMPLE\_BINARY\_OPERATION(sub,\ first\ -\/\ second);}
\DoxyCodeLine{00897\ GKO\_DEFINE\_SIMPLE\_BINARY\_OPERATION(mul,\ first*\ second);}
\DoxyCodeLine{00898\ GKO\_DEFINE\_SIMPLE\_BINARY\_OPERATION(div,\ first\ /\ second);}
\DoxyCodeLine{00899\ GKO\_DEFINE\_SIMPLE\_BINARY\_OPERATION(mod,\ first\ \%\ second);}
\DoxyCodeLine{00900\ }
\DoxyCodeLine{00901\ \textcolor{comment}{//\ relational}}
\DoxyCodeLine{00902\ GKO\_DEFINE\_SIMPLE\_BINARY\_OPERATION(less,\ first\ <\ second);}
\DoxyCodeLine{00903\ GKO\_DEFINE\_SIMPLE\_BINARY\_OPERATION(greater,\ first\ >\ second);}
\DoxyCodeLine{00904\ GKO\_DEFINE\_SIMPLE\_BINARY\_OPERATION(less\_or\_equal,\ first\ <=\ second);}
\DoxyCodeLine{00905\ GKO\_DEFINE\_SIMPLE\_BINARY\_OPERATION(greater\_or\_equal,\ first\ >=\ second);}
\DoxyCodeLine{00906\ GKO\_DEFINE\_SIMPLE\_BINARY\_OPERATION(equal,\ first\ ==\ second);}
\DoxyCodeLine{00907\ GKO\_DEFINE\_SIMPLE\_BINARY\_OPERATION(not\_equal,\ first\ !=\ second);}
\DoxyCodeLine{00908\ }
\DoxyCodeLine{00909\ \textcolor{comment}{//\ binary\ logical}}
\DoxyCodeLine{00910\ GKO\_DEFINE\_SIMPLE\_BINARY\_OPERATION(logical\_or,\ first\ ||\ second);}
\DoxyCodeLine{00911\ GKO\_DEFINE\_SIMPLE\_BINARY\_OPERATION(logical\_and,\ first\&\&\ second);}
\DoxyCodeLine{00912\ }
\DoxyCodeLine{00913\ \textcolor{comment}{//\ binary\ bitwise}}
\DoxyCodeLine{00914\ GKO\_DEFINE\_SIMPLE\_BINARY\_OPERATION(bitwise\_or,\ first\ |\ second);}
\DoxyCodeLine{00915\ GKO\_DEFINE\_SIMPLE\_BINARY\_OPERATION(bitwise\_and,\ first\&\ second);}
\DoxyCodeLine{00916\ GKO\_DEFINE\_SIMPLE\_BINARY\_OPERATION(bitwise\_xor,\ first\ \string^\ second);}
\DoxyCodeLine{00917\ GKO\_DEFINE\_SIMPLE\_BINARY\_OPERATION(left\_shift,\ first\ <<\ second);}
\DoxyCodeLine{00918\ GKO\_DEFINE\_SIMPLE\_BINARY\_OPERATION(right\_shift,\ first\ >>\ second);}
\DoxyCodeLine{00919\ }
\DoxyCodeLine{00920\ \textcolor{comment}{//\ common\ binary\ functions}}
\DoxyCodeLine{00921\ GKO\_DEFINE\_SIMPLE\_BINARY\_OPERATION(max\_operation,\ \doxymbox{\hyperlink{namespacegko_af1812df45c6ec07780d579a12b64c753}{max}}(first,\ second));}
\DoxyCodeLine{00922\ GKO\_DEFINE\_SIMPLE\_BINARY\_OPERATION(min\_operation,\ \doxymbox{\hyperlink{namespacegko_aaaf8487194bcb40b528969c187a413a0}{min}}(first,\ second));}
\DoxyCodeLine{00923\ }
\DoxyCodeLine{00924\ GKO\_DEPRECATED\_SIMPLE\_BINARY\_OPERATION(max\_operaton,\ max\_operation);}
\DoxyCodeLine{00925\ GKO\_DEPRECATED\_SIMPLE\_BINARY\_OPERATION(min\_operaton,\ min\_operation);}
\DoxyCodeLine{00926\ \}\ \ \textcolor{comment}{//\ namespace\ detail}}
\DoxyCodeLine{00927\ \}\ \ \textcolor{comment}{//\ namespace\ accessor}}
\DoxyCodeLine{00928\ }
\DoxyCodeLine{00929\ }
\DoxyCodeLine{00930\ \textcolor{comment}{//\ binary\ arithmetic}}
\DoxyCodeLine{00931\ GKO\_ENABLE\_BINARY\_RANGE\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1add}{add}},\ \textcolor{keyword}{operator}+,\ accessor::detail::add);}
\DoxyCodeLine{00932\ GKO\_ENABLE\_BINARY\_RANGE\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1sub}{sub}},\ \textcolor{keyword}{operator}-\/,\ accessor::detail::sub);}
\DoxyCodeLine{00933\ GKO\_ENABLE\_BINARY\_RANGE\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1mul}{mul}},\ \textcolor{keyword}{operator}*,\ accessor::detail::mul);}
\DoxyCodeLine{00934\ GKO\_ENABLE\_BINARY\_RANGE\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1div}{div}},\ \textcolor{keyword}{operator}/,\ accessor::detail::div);}
\DoxyCodeLine{00935\ GKO\_ENABLE\_BINARY\_RANGE\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1mod}{mod}},\ \textcolor{keyword}{operator}\%,\ accessor::detail::mod);}
\DoxyCodeLine{00936\ }
\DoxyCodeLine{00937\ \textcolor{comment}{//\ relational}}
\DoxyCodeLine{00938\ GKO\_ENABLE\_BINARY\_RANGE\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1less}{less}},\ \textcolor{keyword}{operator}<,\ accessor::detail::less);}
\DoxyCodeLine{00939\ GKO\_ENABLE\_BINARY\_RANGE\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1greater}{greater}},\ \textcolor{keyword}{operator}>,}
\DoxyCodeLine{00940\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ accessor::detail::greater);}
\DoxyCodeLine{00941\ GKO\_ENABLE\_BINARY\_RANGE\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1less__or__equal}{less\_or\_equal}},\ \textcolor{keyword}{operator}<=,}
\DoxyCodeLine{00942\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ accessor::detail::less\_or\_equal);}
\DoxyCodeLine{00943\ GKO\_ENABLE\_BINARY\_RANGE\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1greater__or__equal}{greater\_or\_equal}},\ \textcolor{keyword}{operator}>=,}
\DoxyCodeLine{00944\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ accessor::detail::greater\_or\_equal);}
\DoxyCodeLine{00945\ GKO\_ENABLE\_BINARY\_RANGE\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1equal}{equal}},\ \textcolor{keyword}{operator}==,\ accessor::detail::equal);}
\DoxyCodeLine{00946\ GKO\_ENABLE\_BINARY\_RANGE\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1not__equal}{not\_equal}},\ \textcolor{keyword}{operator}!=,}
\DoxyCodeLine{00947\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ accessor::detail::not\_equal);}
\DoxyCodeLine{00948\ }
\DoxyCodeLine{00949\ \textcolor{comment}{//\ binary\ logical}}
\DoxyCodeLine{00950\ GKO\_ENABLE\_BINARY\_RANGE\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1logical__or}{logical\_or}},\ \textcolor{keyword}{operator}||,}
\DoxyCodeLine{00951\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ accessor::detail::logical\_or);}
\DoxyCodeLine{00952\ GKO\_ENABLE\_BINARY\_RANGE\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1logical__and}{logical\_and}},\ \textcolor{keyword}{operator}\&\&,}
\DoxyCodeLine{00953\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ accessor::detail::logical\_and);}
\DoxyCodeLine{00954\ }
\DoxyCodeLine{00955\ \textcolor{comment}{//\ binary\ bitwise}}
\DoxyCodeLine{00956\ GKO\_ENABLE\_BINARY\_RANGE\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1bitwise__or}{bitwise\_or}},\ \textcolor{keyword}{operator}|,}
\DoxyCodeLine{00957\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ accessor::detail::bitwise\_or);}
\DoxyCodeLine{00958\ GKO\_ENABLE\_BINARY\_RANGE\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1bitwise__and}{bitwise\_and}},\ \textcolor{keyword}{operator}\&,}
\DoxyCodeLine{00959\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ accessor::detail::bitwise\_and);}
\DoxyCodeLine{00960\ GKO\_ENABLE\_BINARY\_RANGE\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1bitwise__xor}{bitwise\_xor}},\ \textcolor{keyword}{operator}\string^,}
\DoxyCodeLine{00961\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ accessor::detail::bitwise\_xor);}
\DoxyCodeLine{00962\ GKO\_ENABLE\_BINARY\_RANGE\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1left__shift}{left\_shift}},\ \textcolor{keyword}{operator}<<,}
\DoxyCodeLine{00963\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ accessor::detail::left\_shift);}
\DoxyCodeLine{00964\ GKO\_ENABLE\_BINARY\_RANGE\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1right__shift}{right\_shift}},\ \textcolor{keyword}{operator}>>,}
\DoxyCodeLine{00965\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ accessor::detail::right\_shift);}
\DoxyCodeLine{00966\ }
\DoxyCodeLine{00967\ \textcolor{comment}{//\ common\ binary\ functions}}
\DoxyCodeLine{00968\ GKO\_ENABLE\_BINARY\_RANGE\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1max__operation}{max\_operation}},\ \doxymbox{\hyperlink{namespacegko_af1812df45c6ec07780d579a12b64c753}{max}},}
\DoxyCodeLine{00969\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ accessor::detail::max\_operation);}
\DoxyCodeLine{00970\ GKO\_ENABLE\_BINARY\_RANGE\_OPERATION(\doxymbox{\hyperlink{structgko_1_1accessor_1_1min__operation}{min\_operation}},\ \doxymbox{\hyperlink{namespacegko_aaaf8487194bcb40b528969c187a413a0}{min}},}
\DoxyCodeLine{00971\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ accessor::detail::min\_operation);}
\DoxyCodeLine{00972\ }
\DoxyCodeLine{00973\ }
\DoxyCodeLine{00974\ \textcolor{comment}{//\ special\ binary\ range\ functions}}
\DoxyCodeLine{00975\ \textcolor{keyword}{namespace\ }\doxymbox{\hyperlink{namespacegko_1_1accessor}{accessor}}\ \{}
\DoxyCodeLine{00976\ }
\DoxyCodeLine{00977\ }
\DoxyCodeLine{00978\ \textcolor{keyword}{template}\ <gko::detail::operation\_kind\ Kind,\ \textcolor{keyword}{typename}\ FirstAccessor,}
\DoxyCodeLine{00979\ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{typename}\ SecondAccessor>}
\DoxyCodeLine{00980\ \textcolor{keyword}{struct\ }mmul\_operation\ \{}
\DoxyCodeLine{00981\ \ \ \ \ \textcolor{keyword}{static\_assert}(Kind\ ==\ gko::detail::operation\_kind::range\_by\_range,}
\DoxyCodeLine{00982\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}Matrix\ multiplication\ expects\ both\ operands\ to\ be\ ranges"{}});}
\DoxyCodeLine{00983\ \ \ \ \ \textcolor{keyword}{using\ }first\_accessor\ =\ FirstAccessor;}
\DoxyCodeLine{00984\ \ \ \ \ \textcolor{keyword}{using\ }second\_accessor\ =\ SecondAccessor;}
\DoxyCodeLine{00985\ \ \ \ \ \textcolor{keyword}{static\_assert}(first\_accessor::dimensionality\ ==}
\DoxyCodeLine{00986\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ second\_accessor::dimensionality,}
\DoxyCodeLine{00987\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}Both\ ranges\ need\ to\ have\ the\ same\ number\ of\ dimensions"{}});}
\DoxyCodeLine{00988\ \ \ \ \ \textcolor{keyword}{static}\ \textcolor{keyword}{constexpr}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ dimensionality\ =\ first\_accessor::dimensionality;}
\DoxyCodeLine{00989\ }
\DoxyCodeLine{00990\ \ \ \ \ GKO\_ATTRIBUTES\ \textcolor{keyword}{explicit}\ mmul\_operation(\textcolor{keyword}{const}\ FirstAccessor\&\ first,}
\DoxyCodeLine{00991\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ SecondAccessor\&\ second)}
\DoxyCodeLine{00992\ \ \ \ \ \ \ \ \ :\ first\{first\},\ second\{second\}}
\DoxyCodeLine{00993\ \ \ \ \ \{}
\DoxyCodeLine{00994\ \ \ \ \ \ \ \ \ GKO\_ASSERT(first.length(1)\ ==\ second.length(0));}
\DoxyCodeLine{00995\ \ \ \ \ \ \ \ \ GKO\_ASSERT(gko::detail::equal\_dimensions<2>(first,\ second));}
\DoxyCodeLine{00996\ \ \ \ \ \}}
\DoxyCodeLine{00997\ }
\DoxyCodeLine{00998\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ FirstDimension,\ \textcolor{keyword}{typename}\ SecondDimension,}
\DoxyCodeLine{00999\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{typename}...\ DimensionTypes>}
\DoxyCodeLine{01000\ \ \ \ \ GKO\_ATTRIBUTES\ \textcolor{keyword}{auto}\ operator()(\textcolor{keyword}{const}\ FirstDimension\&\ row,}
\DoxyCodeLine{01001\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ SecondDimension\&\ col,}
\DoxyCodeLine{01002\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ DimensionTypes\&...\ rest)\ \textcolor{keyword}{const}}
\DoxyCodeLine{01003\ \ \ \ \ \ \ \ \ -\/>\ \textcolor{keyword}{decltype}(std::declval<FirstAccessor>()(row,\ 0,\ rest...)\ *}
\DoxyCodeLine{01004\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::declval<SecondAccessor>()(0,\ col,\ rest...)\ +}
\DoxyCodeLine{01005\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::declval<FirstAccessor>()(row,\ 1,\ rest...)\ *}
\DoxyCodeLine{01006\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::declval<SecondAccessor>()(1,\ col,\ rest...))}
\DoxyCodeLine{01007\ \ \ \ \ \{}
\DoxyCodeLine{01008\ \ \ \ \ \ \ \ \ \textcolor{keyword}{using\ }result\_type\ =}
\DoxyCodeLine{01009\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{decltype}(first(row,\ 0,\ rest...)\ *\ second(0,\ col,\ rest...)\ +}
\DoxyCodeLine{01010\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ first(row,\ 1,\ rest...)\ *\ second(1,\ col,\ rest...));}
\DoxyCodeLine{01011\ \ \ \ \ \ \ \ \ GKO\_ASSERT(first.length(1)\ ==\ second.length(0));}
\DoxyCodeLine{01012\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ result\ =\ \doxymbox{\hyperlink{namespacegko_a70dbe01ff95c7b953d3d737424c6feb5}{zero<result\_type>}}();}
\DoxyCodeLine{01013\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keyword}{auto}\ size\ =\ first.length(1);}
\DoxyCodeLine{01014\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{for}\ (\textcolor{keyword}{auto}\ i\ =\ \doxymbox{\hyperlink{namespacegko_a70dbe01ff95c7b953d3d737424c6feb5}{zero}}(size);\ i\ <\ size;\ ++i)\ \{}
\DoxyCodeLine{01015\ \ \ \ \ \ \ \ \ \ \ \ \ result\ +=\ first(row,\ i,\ rest...)\ *\ second(i,\ col,\ rest...);}
\DoxyCodeLine{01016\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{01017\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ result;}
\DoxyCodeLine{01018\ \ \ \ \ \}}
\DoxyCodeLine{01019\ }
\DoxyCodeLine{01020\ \ \ \ \ GKO\_ATTRIBUTES\ \textcolor{keyword}{constexpr}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ length(\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ dimension)\textcolor{keyword}{\ const}}
\DoxyCodeLine{01021\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01022\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ dimension\ ==\ 1\ ?\ second.length(1)\ :\ first.length(dimension);}
\DoxyCodeLine{01023\ \ \ \ \ \}}
\DoxyCodeLine{01024\ }
\DoxyCodeLine{01025\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ OtherAccessor>}
\DoxyCodeLine{01026\ \ \ \ \ GKO\_ATTRIBUTES\ \textcolor{keywordtype}{void}\ copy\_from(\textcolor{keyword}{const}\ OtherAccessor\&\ other)\ \textcolor{keyword}{const}\ =\ \textcolor{keyword}{delete};}
\DoxyCodeLine{01027\ }
\DoxyCodeLine{01028\ \ \ \ \ \textcolor{keyword}{const}\ first\_accessor\ first;}
\DoxyCodeLine{01029\ \ \ \ \ \textcolor{keyword}{const}\ second\_accessor\ second;}
\DoxyCodeLine{01030\ \};}
\DoxyCodeLine{01031\ }
\DoxyCodeLine{01032\ }
\DoxyCodeLine{01033\ \}\ \ \textcolor{comment}{//\ namespace\ accessor}}
\DoxyCodeLine{01034\ }
\DoxyCodeLine{01035\ }
\DoxyCodeLine{01036\ GKO\_BIND\_RANGE\_OPERATION\_TO\_OPERATOR(mmul\_operation,\ mmul);}
\DoxyCodeLine{01037\ }
\DoxyCodeLine{01038\ }
\DoxyCodeLine{01039\ \textcolor{preprocessor}{\#undef\ GKO\_DEFINE\_SIMPLE\_BINARY\_OPERATION}}
\DoxyCodeLine{01040\ \textcolor{preprocessor}{\#undef\ GKO\_ENABLE\_BINARY\_RANGE\_OPERATION}}
\DoxyCodeLine{01041\ }
\DoxyCodeLine{01042\ }
\DoxyCodeLine{01043\ \}\ \ \textcolor{comment}{//\ namespace\ gko}}
\DoxyCodeLine{01044\ }
\DoxyCodeLine{01045\ }
\DoxyCodeLine{01046\ \textcolor{preprocessor}{\#endif\ \ }\textcolor{comment}{//\ GKO\_PUBLIC\_CORE\_BASE\_RANGE\_HPP\_}}

\end{DoxyCode}
