\hypertarget{iterators_8h_source}{}\doxysection{iterators.\+h} \label{iterators_8h_source}\index{kblib/iterators.h@{kblib/iterators.h}} \mbox{\hyperlink{iterators_8h}{Go to the documentation of this file.}} \begin{DoxyCode}{0} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00001}00001 \textcolor{comment}{/* *****************************************************************************}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00002}00002 \textcolor{comment}{ * kblib is a general utility library for C++14 and C++17, intended to provide}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00003}00003 \textcolor{comment}{ * performant high-\/level abstractions and more expressive ways to do simple}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00004}00004 \textcolor{comment}{ * things.}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00005}00005 \textcolor{comment}{ *}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00006}00006 \textcolor{comment}{ * Copyright (c) 2021 killerbee}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00007}00007 \textcolor{comment}{ *}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00008}00008 \textcolor{comment}{ * This program is free software: you can redistribute it and/or modify}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00009}00009 \textcolor{comment}{ * it under the terms of the GNU General Public License as published by}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00010}00010 \textcolor{comment}{ * the Free Software Foundation, either version 3 of the License, or}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00011}00011 \textcolor{comment}{ * (at your option) any later version.}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00012}00012 \textcolor{comment}{ *}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00013}00013 \textcolor{comment}{ * This program is distributed in the hope that it will be useful,}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00014}00014 \textcolor{comment}{ * but WITHOUT ANY WARRANTY; without even the implied warranty of}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00015}00015 \textcolor{comment}{ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00016}00016 \textcolor{comment}{ * GNU General Public License for more details.}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00017}00017 \textcolor{comment}{ *}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00018}00018 \textcolor{comment}{ * You should have received a copy of the GNU General Public License}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00019}00019 \textcolor{comment}{ * along with this program. If not, see .}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00020}00020 \textcolor{comment}{ * ****************************************************************************/}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00021}00021 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00032}00032 \textcolor{preprocessor}{\#ifndef KBLIB\_ITERATORS\_H}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00033}00033 \textcolor{preprocessor}{\#define KBLIB\_ITERATORS\_H}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00034}00034 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00035}00035 \textcolor{preprocessor}{\#include "{}\mbox{\hyperlink{enumerate-contrib-cry_8h}{enumerate-\/contrib-\/cry.h}}"{}}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00036}00036 \textcolor{preprocessor}{\#include "{}\mbox{\hyperlink{enumerate-contrib-tw_8h}{enumerate-\/contrib-\/tw.h}}"{}}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00037}00037 \textcolor{preprocessor}{\#include "{}\mbox{\hyperlink{fakestd_8h}{fakestd.h}}"{}}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00038}00038 \textcolor{preprocessor}{\#include "{}\mbox{\hyperlink{traits_8h}{traits.h}}"{}}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00039}00039 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00040}00040 \textcolor{preprocessor}{\#include }} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00041}00041 \textcolor{preprocessor}{\#include }} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00042}00042 \textcolor{preprocessor}{\#include }} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00043}00043 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00044}00044 \textcolor{preprocessor}{\#if KBLIB\_USE\_CXX17}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00045}00045 \textcolor{preprocessor}{\# include }} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00046}00046 \textcolor{preprocessor}{\#endif}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00047}00047 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00048}00048 \textcolor{keyword}{namespace }\mbox{\hyperlink{tdecl_8h_a4b5c574c663a392148218cd4410fd7a1}{KBLIB\_NS}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00049}00049 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00050}00050 \textcolor{keyword}{template} <\textcolor{keyword}{typename} ptr>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00051}\mbox{\hyperlink{structkblib_1_1to__pointer__impl}{00051}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1to__pointer__impl}{to\_pointer\_impl}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00052}\mbox{\hyperlink{structkblib_1_1to__pointer__impl_a34c5114f6123f97b18da8bd50aa9c091}{00052}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1to__pointer__impl_a34c5114f6123f97b18da8bd50aa9c091}{operator()}}(ptr\&\& p) \textcolor{keyword}{const} \textcolor{keyword}{noexcept} -\/> \textcolor{keyword}{auto} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00053}00053 \textcolor{keywordflow}{return} \mbox{\hyperlink{structkblib_1_1to__pointer__impl}{to\_pointer\_impl}}<\textcolor{keyword}{decltype}(p.operator-\/>())>\{\}(p.operator-\/>());} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00054}00054 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00055}\mbox{\hyperlink{structkblib_1_1to__pointer__impl_a128ce82fad41f41dd0170e03a474dcf5}{00055}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1to__pointer__impl_a128ce82fad41f41dd0170e03a474dcf5}{operator()}}(\textcolor{keyword}{const} ptr\& p) \textcolor{keyword}{const} \textcolor{keyword}{noexcept} -\/> \textcolor{keyword}{auto} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00056}00056 \textcolor{keywordflow}{return} \mbox{\hyperlink{structkblib_1_1to__pointer__impl}{to\_pointer\_impl}}<\textcolor{keyword}{decltype}(p.operator-\/>())>\{\}(p.operator-\/>());} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00057}00057 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00058}00058 \};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00059}00059 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00060}00060 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00061}\mbox{\hyperlink{structkblib_1_1to__pointer__impl_3_01_t_01_5_01_4}{00061}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1to__pointer__impl}{to\_pointer\_impl}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00062}\mbox{\hyperlink{structkblib_1_1to__pointer__impl_3_01_t_01_5_01_4_a5c803767431b69b3cadb7c3e6c7a86e5}{00062}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1to__pointer__impl_3_01_t_01_5_01_4_a5c803767431b69b3cadb7c3e6c7a86e5}{operator()}}(T* p) \textcolor{keyword}{const} \textcolor{keyword}{noexcept} -\/> T* \{ \textcolor{keywordflow}{return} p; \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00063}00063 \};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00064}00064 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00071}00071 \textcolor{keyword}{template} <\textcolor{keyword}{typename} P>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00072}\mbox{\hyperlink{namespacekblib_a1c2aa67048789f77bea56734a583d3d1}{00072}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a1c2aa67048789f77bea56734a583d3d1}{to\_pointer}}(P\&\& p) \textcolor{keyword}{noexcept} -\/> \textcolor{keyword}{auto}* \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00073}00073 \textcolor{keywordflow}{return} \mbox{\hyperlink{structkblib_1_1to__pointer__impl}{to\_pointer\_impl}}>\{\}(p);} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00074}00074 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00075}00075 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00076}00076 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Container,} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00077}00077 \textcolor{keyword}{typename} Comp = std::less>>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00078}\mbox{\hyperlink{namespacekblib_a7d43c2f73a1e2d35ca150b9ac3a43d58}{00078}} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a7d43c2f73a1e2d35ca150b9ac3a43d58}{max\_element}}(Container\& c, Comp comp) -\/> \mbox{\hyperlink{namespacekblib_ac04bc7261d579d570a3847df654bc209}{value\_type\_linear\_t}}* \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00079}00079 \textcolor{keyword}{auto} it = \mbox{\hyperlink{namespacekblib_a7d43c2f73a1e2d35ca150b9ac3a43d58}{max\_element}}(std::begin(c), std::end(c), comp);} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00080}00080 \textcolor{keywordflow}{if} (it != std::end(c)) \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00081}00081 \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a1c2aa67048789f77bea56734a583d3d1}{to\_pointer}}(it);} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00082}00082 \} \textcolor{keywordflow}{else} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00083}00083 \textcolor{keywordflow}{return} \textcolor{keyword}{nullptr};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00084}00084 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00085}00085 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00090}00090 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, \textcolor{keyword}{typename} E, \textcolor{keyword}{typename} = \textcolor{keywordtype}{void}>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00091}\mbox{\hyperlink{structkblib_1_1is__output__iterator__for}{00091}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1is__output__iterator__for}{is\_output\_iterator\_for}} : std::false\_type \{\};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00092}00092 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00093}00093 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, \textcolor{keyword}{typename} E>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00094}\mbox{\hyperlink{structkblib_1_1is__output__iterator__for_3_01_t_00_01_e_00_01void__t_3_01decltype_07_5std_1_1dec93bfaad0990f9bf6c57857b906bb5af3}{00094}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1is__output__iterator__for}{is\_output\_iterator\_for}}<} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00095}00095 T, E, \mbox{\hyperlink{namespacekblib_1_1fakestd_a2df414d5a1a1f59c8f33520890755f84}{void\_t}}()++ = std::declval())>>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00096}00096 : std::true\_type \{\};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00097}00097 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00098}00098 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Container>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00107}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{00107}} \textcolor{keyword}{class }\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00108}00108 \textcolor{keyword}{public}:} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00109}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_ade5ba48579164d64990ab403e00be9e6}{00109}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_ade5ba48579164d64990ab403e00be9e6}{value\_type}} = void;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00110}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_a69d3239ba2d1850cfb7fd65fb8d6d8e6}{00110}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_a69d3239ba2d1850cfb7fd65fb8d6d8e6}{difference\_type}} = std::ptrdiff\_t;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00111}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_a14ff8afd3d2f7750462bc055dd6c7e12}{00111}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_a14ff8afd3d2f7750462bc055dd6c7e12}{pointer}} = void;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00112}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_a4c965631476aea652d01a78f74775b21}{00112}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_a4c965631476aea652d01a78f74775b21}{reference}} = void;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00113}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_aefb201f1eb9c9483044b2394325c551d}{00113}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_aefb201f1eb9c9483044b2394325c551d}{iterator\_category}} = std::output\_iterator\_tag;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00114}00114 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00115}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_ac5ed3173eb79c2da628df8addec358cc}{00115}} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_ac5ed3173eb79c2da628df8addec358cc}{counting\_back\_insert\_iterator}}() noexcept = default;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00116}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_ab9b6328179e44458d13a4ae4149e8088}{00116}} explicit \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator}}(Container\& c, \mbox{\hyperlink{namespacestd}{std}}::\textcolor{keywordtype}{size\_t} n = 0)} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00117}00117 : container(\mbox{\hyperlink{namespacestd}{std}}::addressof(c))} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00118}00118 , count(n) \{\}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00119}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_aeb8e204f116e74e73be7d2069c258c68}{00119}} \textcolor{keyword}{explicit} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_aeb8e204f116e74e73be7d2069c258c68}{counting\_back\_insert\_iterator}}(std::size\_t n)} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00120}00120 : count(n) \{\}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00121}00121 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00122}\mbox{\hyperlink{structkblib_1_1counting__back__insert__iterator_1_1proxy__iterator}{00122}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1counting__back__insert__iterator_1_1proxy__iterator}{proxy\_iterator}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00123}\mbox{\hyperlink{structkblib_1_1counting__back__insert__iterator_1_1proxy__iterator_abd8fd45f3621766603a39b346c807e8b}{00123}} \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1counting__back__insert__iterator_1_1proxy__iterator_abd8fd45f3621766603a39b346c807e8b}{value\_type}} = \textcolor{keyword}{typename} Container::value\_type;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00124}00124 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00125}\mbox{\hyperlink{structkblib_1_1counting__back__insert__iterator_1_1proxy__iterator_a31b07e9d36cbc0e4251d79744d793dfd}{00125}} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1counting__back__insert__iterator_1_1proxy__iterator_a31b07e9d36cbc0e4251d79744d793dfd}{operator=}}(\textcolor{keyword}{const} \mbox{\hyperlink{structkblib_1_1counting__back__insert__iterator_1_1proxy__iterator_abd8fd45f3621766603a39b346c807e8b}{value\_type}}\& value) \& -\/> \mbox{\hyperlink{structkblib_1_1counting__back__insert__iterator_1_1proxy__iterator}{proxy\_iterator}}\& \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00126}00126 assert(container);} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00127}00127 \textcolor{comment}{// Multiple assignments for a single dereference are not allowed}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00128}00128 assert(*dirty);} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00129}00129 *dirty = \textcolor{keyword}{false};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00130}00130 container-\/>push\_back(value);} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00131}00131 \textcolor{keywordflow}{return} *\textcolor{keyword}{this};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00132}00132 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00133}00133 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00134}\mbox{\hyperlink{structkblib_1_1counting__back__insert__iterator_1_1proxy__iterator_a2896b092bfe21155466c07f9fbfe60ff}{00134}} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1counting__back__insert__iterator_1_1proxy__iterator_a2896b092bfe21155466c07f9fbfe60ff}{operator=}}(\mbox{\hyperlink{structkblib_1_1counting__back__insert__iterator_1_1proxy__iterator_abd8fd45f3621766603a39b346c807e8b}{value\_type}}\&\& value) \& -\/> \mbox{\hyperlink{structkblib_1_1counting__back__insert__iterator_1_1proxy__iterator}{proxy\_iterator}}\& \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00135}00135 assert(container);} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00136}00136 \textcolor{comment}{// Multiple assignments for a single dereference are not allowed}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00137}00137 assert(*dirty);} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00138}00138 *dirty = \textcolor{keyword}{false};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00139}00139 container-\/>push\_back(std::move(value));} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00140}00140 \textcolor{keywordflow}{return} *\textcolor{keyword}{this};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00141}00141 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00142}00142 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00143}\mbox{\hyperlink{structkblib_1_1counting__back__insert__iterator_1_1proxy__iterator_adeb83205bd178b48a03cab3e98988f7a}{00143}} Container* \mbox{\hyperlink{structkblib_1_1counting__back__insert__iterator_1_1proxy__iterator_adeb83205bd178b48a03cab3e98988f7a}{container}};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00144}\mbox{\hyperlink{structkblib_1_1counting__back__insert__iterator_1_1proxy__iterator_a5a4455004aaeee43e2160f521d30866a}{00144}} \textcolor{keywordtype}{bool}* \mbox{\hyperlink{structkblib_1_1counting__back__insert__iterator_1_1proxy__iterator_a5a4455004aaeee43e2160f521d30866a}{dirty}};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00145}00145 \};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00146}00146 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00147}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_ad979ad26eefc9501ebbdf6037dedbaad}{00147}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_ad979ad26eefc9501ebbdf6037dedbaad}{operator*}}() noexcept -\/> \mbox{\hyperlink{structkblib_1_1counting__back__insert__iterator_1_1proxy__iterator}{proxy\_iterator}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00148}00148 assert(dirty);} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00149}00149 \textcolor{keywordflow}{return} \{container, \&dirty\};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00150}00150 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00151}00151 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00152}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_aace73cca4051a496fe7bc9fb5533e334}{00152}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_aace73cca4051a496fe7bc9fb5533e334}{operator++}}() \& \textcolor{keyword}{noexcept} -\/> \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator}}\& \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00153}00153 assert(not dirty);} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00154}00154 ++count;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00155}00155 dirty = \textcolor{keyword}{true};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00156}00156 \textcolor{keywordflow}{return} *\textcolor{keyword}{this};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00157}00157 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00158}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_a7b1f92c07cf42b5957e53e45eec92a7e}{00158}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_a7b1f92c07cf42b5957e53e45eec92a7e}{operator++}}(\textcolor{keywordtype}{int}) \textcolor{keyword}{noexcept} -\/> \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator}} = \textcolor{keyword}{delete};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00159}00159 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00160}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_a4003d2e91f377a678aa4537662e034ea}{00160}} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_a4003d2e91f377a678aa4537662e034ea}{operator==}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator}}\& \mbox{\hyperlink{namespacekblib_a22831dce77d5f35c13930b5e30a59f07}{a}},} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00161}00161 \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator}}\& b) \textcolor{keyword}{noexcept}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00162}00162 -\/> \textcolor{keywordtype}{bool} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00163}00163 \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a22831dce77d5f35c13930b5e30a59f07}{a}}.count == b.count;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00164}00164 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00165}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_ab9fe0664ba99710a8b92feb938794857}{00165}} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_ab9fe0664ba99710a8b92feb938794857}{operator!=}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator}}\& \mbox{\hyperlink{namespacekblib_a22831dce77d5f35c13930b5e30a59f07}{a}},} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00166}00166 \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator}}\& b) \textcolor{keyword}{noexcept}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00167}00167 -\/> \textcolor{keywordtype}{bool} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00168}00168 \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a22831dce77d5f35c13930b5e30a59f07}{a}}.count != b.count;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00169}00169 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00170}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_aa1500957b74596104cb90f950dcfd5b4}{00170}} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_aa1500957b74596104cb90f950dcfd5b4}{operator<}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator}}\& \mbox{\hyperlink{namespacekblib_a22831dce77d5f35c13930b5e30a59f07}{a}},} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00171}00171 \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator}}\& b) \textcolor{keyword}{noexcept}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00172}00172 -\/> \textcolor{keywordtype}{bool} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00173}00173 \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a22831dce77d5f35c13930b5e30a59f07}{a}}.count < b.count;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00174}00174 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00175}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_af0644c280df17d37e12839609cbd4477}{00175}} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_af0644c280df17d37e12839609cbd4477}{operator<=}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator}}\& \mbox{\hyperlink{namespacekblib_a22831dce77d5f35c13930b5e30a59f07}{a}},} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00176}00176 \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator}}\& b) \textcolor{keyword}{noexcept}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00177}00177 -\/> \textcolor{keywordtype}{bool} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00178}00178 \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a22831dce77d5f35c13930b5e30a59f07}{a}}.count <= b.count;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00179}00179 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00180}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_aa670e3932112fd200c1949faa3303683}{00180}} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_aa670e3932112fd200c1949faa3303683}{operator>}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator}}\& \mbox{\hyperlink{namespacekblib_a22831dce77d5f35c13930b5e30a59f07}{a}},} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00181}00181 \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator}}\& b) \textcolor{keyword}{noexcept}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00182}00182 -\/> \textcolor{keywordtype}{bool} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00183}00183 \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a22831dce77d5f35c13930b5e30a59f07}{a}}.count > b.count;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00184}00184 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00185}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_a37986a7c3876f9d0801480e1e2e7d526}{00185}} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_a37986a7c3876f9d0801480e1e2e7d526}{operator>=}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator}}\& \mbox{\hyperlink{namespacekblib_a22831dce77d5f35c13930b5e30a59f07}{a}},} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00186}00186 \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator}}\& b) \textcolor{keyword}{noexcept}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00187}00187 -\/> \textcolor{keywordtype}{bool} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00188}00188 \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a22831dce77d5f35c13930b5e30a59f07}{a}}.count >= b.count;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00189}00189 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00190}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_a8744e224b5debfd93bf9724c7e8bceef}{00190}} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_a8744e224b5debfd93bf9724c7e8bceef}{operator-\/}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator}}\& \mbox{\hyperlink{namespacekblib_a22831dce77d5f35c13930b5e30a59f07}{a}},} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00191}00191 \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator}}\& b) \textcolor{keyword}{noexcept}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00192}00192 -\/> std::ptrdiff\_t \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00193}00193 \textcolor{keywordflow}{return} std::ptrdiff\_t(\mbox{\hyperlink{namespacekblib_a22831dce77d5f35c13930b5e30a59f07}{a}}.count) -\/ ptrdiff\_t(b.count);} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00194}00194 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00195}00195 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00196}00196 \textcolor{keyword}{protected}:} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00197}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_a2f651ff51de25df31e9b5de20e0247d0}{00197}} Container* container = \textcolor{keyword}{nullptr};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00198}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_aafd735c0f6c6b0f9f035be3490b6e101}{00198}} std::size\_t count = 0;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00199}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_a74f695a1798231be71fb5d980853f71e}{00199}} \textcolor{keywordtype}{bool} dirty = \textcolor{keyword}{true};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00200}00200 \};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00201}00201 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00202}00202 \textcolor{keyword}{template} <\textcolor{keyword}{typename} C>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00203}\mbox{\hyperlink{namespacekblib_a459982020db617ac2a1dbd2c3e2345ea}{00203}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator}} \mbox{\hyperlink{namespacekblib_a459982020db617ac2a1dbd2c3e2345ea}{counting\_back\_inserter}}(} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00204}00204 C\& c, std::size\_t count = 0) \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00205}00205 \textcolor{keywordflow}{return} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator}}\{c, count\};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00206}00206 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00207}00207 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00221}00221 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Value, \textcolor{keyword}{typename} Delta>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00222}\mbox{\hyperlink{classkblib_1_1range__t}{00222}} \textcolor{keyword}{class }\mbox{\hyperlink{classkblib_1_1range__t}{range\_t}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00223}00223 \textcolor{keyword}{private}:} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00224}00224 Value \mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}}, \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00225}00225 Delta step;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00226}00226 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00227}00227 \textcolor{keyword}{constexpr} \textcolor{keyword}{static} \textcolor{keywordtype}{bool} nothrow\_copyable} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00228}00228 = std::is\_nothrow\_copy\_constructible::value;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00229}00229 \textcolor{keyword}{constexpr} \textcolor{keyword}{static} \textcolor{keywordtype}{bool} nothrow\_steppable = \textcolor{keyword}{noexcept}(\mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}} + step);} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00230}00230 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00231}00231 \textcolor{keyword}{public}:} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00240}\mbox{\hyperlink{classkblib_1_1range__t_ae3de19c205331d5a959f14b8eb912ec7}{00240}} \textcolor{keyword}{constexpr} \mbox{\hyperlink{classkblib_1_1range__t_ae3de19c205331d5a959f14b8eb912ec7}{range\_t}}(Value min\_, Value max\_, Delta step\_ = 1)} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00241}00241 : \mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}}(min\_)} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00242}00242 , \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}}(max\_)} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00243}00243 , step(step\_) \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00244}00244 normalize();} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00245}00245 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00252}\mbox{\hyperlink{classkblib_1_1range__t_aa5a309c3eb79e6d76d685ecac0caece4}{00252}} \textcolor{keyword}{constexpr} \mbox{\hyperlink{classkblib_1_1range__t_aa5a309c3eb79e6d76d685ecac0caece4}{range\_t}}(Value max\_)} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00253}00253 : \mbox{\hyperlink{classkblib_1_1range__t}{range\_t}}(Value\{\}, max\_, (max\_ >= Value\{\}) ? 1 : -\/1) \{\}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00254}00254 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00259}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{00259}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00260}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a30c6d9b456ea99326563157668798ac9}{00260}} Value \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a30c6d9b456ea99326563157668798ac9}{val}};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00261}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_ae59bccc6efff736de76994dd18125d9f}{00261}} Delta \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_ae59bccc6efff736de76994dd18125d9f}{step}};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00262}00262 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00263}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a914497be54bb426f5de7dfc2a985b846}{00263}} \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a914497be54bb426f5de7dfc2a985b846}{difference\_type}} = std::ptrdiff\_t;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00264}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a6f406d6d7132255881b1da3191125ca4}{00264}} \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a6f406d6d7132255881b1da3191125ca4}{value\_type}} = Value;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00265}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a691d420850cb73d644e884a775b4b68f}{00265}} \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a691d420850cb73d644e884a775b4b68f}{pointer}} = \textcolor{keyword}{const} Value*;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00266}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a682e7449f7f839d3d8206feebfbca69e}{00266}} \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a682e7449f7f839d3d8206feebfbca69e}{reference}} = Value;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00267}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_aeab2334080cd7bd9e381e6ecf13a8587}{00267}} \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_aeab2334080cd7bd9e381e6ecf13a8587}{iterator\_category}} = std::input\_iterator\_tag;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00268}00268 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00274}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a47e782c6accf944706abdafaddc1de83}{00274}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a47e782c6accf944706abdafaddc1de83}{operator*}}() const noexcept(nothrow\_copyable) -\/> Value \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00275}00275 \textcolor{keywordflow}{return} val;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00276}00276 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00283}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_aa7a0d42e4febc97061160598536943fc}{00283}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_aa7a0d42e4febc97061160598536943fc}{operator-\/>}}() const noexcept -\/> \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a691d420850cb73d644e884a775b4b68f}{pointer}} \{ \textcolor{keywordflow}{return} \&val; \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00289}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a96770fb0146a015985e3a49ebcba5f8f}{00289}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a96770fb0146a015985e3a49ebcba5f8f}{operator++}}() \& \textcolor{keyword}{noexcept}(nothrow\_steppable) -\/> \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}}\& \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00290}00290 val = \textcolor{keyword}{static\_cast<}Value\textcolor{keyword}{>}(val + step);} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00291}00291 \textcolor{keywordflow}{return} *\textcolor{keyword}{this};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00292}00292 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00299}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a2a4f6e0b5f07b2fc5d9d27f7d48a0ef5}{00299}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a2a4f6e0b5f07b2fc5d9d27f7d48a0ef5}{operator++}}(\textcolor{keywordtype}{int}) \textcolor{keyword}{noexcept}(nothrow\_steppable) -\/> \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00300}00300 \textcolor{keyword}{auto} ret = *\textcolor{keyword}{this};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00301}00301 val = val + step;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00302}00302 \textcolor{keywordflow}{return} ret;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00303}00303 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00310}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_ae3414fe5601b97423c7c90b08f393ab6}{00310}} \textcolor{keyword}{constexpr} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_ae3414fe5601b97423c7c90b08f393ab6}{operator==}}(\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}} l, \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}} r) \textcolor{keyword}{noexcept}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00311}00311 -\/> \textcolor{keywordtype}{bool} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00312}00312 \textcolor{keywordflow}{return} l.val == r.val and l.step == r.step;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00313}00313 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00320}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a316eeb0da30d5d2e13e4f74535642c9e}{00320}} \textcolor{keyword}{constexpr} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a316eeb0da30d5d2e13e4f74535642c9e}{operator!=}}(\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}} l, \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}} r) \textcolor{keyword}{noexcept}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00321}00321 -\/> \textcolor{keywordtype}{bool} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00322}00322 \textcolor{keywordflow}{return} l.val != r.val or l.step != r.step;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00323}00323 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00330}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a34aba56ce509f4dfa3cf37b8a8de7f4b}{00330}} \textcolor{keyword}{constexpr} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a34aba56ce509f4dfa3cf37b8a8de7f4b}{operator<}}(\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}} l, \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}} r) \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{bool} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00331}00331 \textcolor{keywordflow}{if} (l.step > 0)} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00332}00332 \textcolor{keywordflow}{return} l.val < r.val;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00333}00333 \textcolor{keywordflow}{else}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00334}00334 \textcolor{keywordflow}{return} l.val > r.val;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00335}00335 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00342}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a71a14c52ef5888860d2f4886e772e570}{00342}} \textcolor{keyword}{constexpr} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a71a14c52ef5888860d2f4886e772e570}{operator<=}}(\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}} l, \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}} r) \textcolor{keyword}{noexcept}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00343}00343 -\/> \textcolor{keywordtype}{bool} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00344}00344 \textcolor{keywordflow}{return} not (r < l);} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00345}00345 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00352}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a24fcdc24ff283706e475458b78987beb}{00352}} \textcolor{keyword}{constexpr} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a24fcdc24ff283706e475458b78987beb}{operator>}}(\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}} l, \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}} r) \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{bool} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00353}00353 \textcolor{keywordflow}{return} r < l;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00354}00354 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00361}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a574d1c5a42025e001b54abb21ce3a2ba}{00361}} \textcolor{keyword}{constexpr} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a574d1c5a42025e001b54abb21ce3a2ba}{operator>=}}(\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}} l, \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}} r) \textcolor{keyword}{noexcept}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00362}00362 -\/> \textcolor{keywordtype}{bool} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00363}00363 \textcolor{keywordflow}{return} not (l < r);} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00364}00364 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00365}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a6a97b4c20d4c8e0f19665daf80c9014d}{00365}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a6a97b4c20d4c8e0f19665daf80c9014d}{operator[]}}(std::ptrdiff\_t x) \textcolor{keyword}{const} \textcolor{keyword}{noexcept} -\/> Value \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00366}00366 \textcolor{keywordflow}{return} \textcolor{keyword}{static\_cast<}Value\textcolor{keyword}{>}(val + x * step);} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00367}00367 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00368}00368 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Integral>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00369}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a27cc85ac03fa74faf1a533d8f10cf20d}{00369}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a27cc85ac03fa74faf1a533d8f10cf20d}{operator[]}}(Integral x) \textcolor{keyword}{const} \textcolor{keyword}{noexcept} -\/> Value \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00370}00370 \textcolor{keywordflow}{return} \textcolor{keyword}{static\_cast<}Value\textcolor{keyword}{>}(val + std::ptrdiff\_t(x) * step);} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00371}00371 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00372}00372 \};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00373}00373 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00377}\mbox{\hyperlink{classkblib_1_1range__t_ad99bfa41676f9181d7597fb21a8b1ed2}{00377}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1range__t_ad99bfa41676f9181d7597fb21a8b1ed2}{begin}}() const noexcept -\/> \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}} \{ \textcolor{keywordflow}{return} \{\mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}}, step\}; \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00381}\mbox{\hyperlink{classkblib_1_1range__t_a622a7bd9c78e511f70a3dd229871bad1}{00381}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1range__t_a622a7bd9c78e511f70a3dd229871bad1}{end}}() const noexcept -\/> \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}} \{ \textcolor{keywordflow}{return} \{\mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}}, step\}; \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00382}00382 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00386}\mbox{\hyperlink{classkblib_1_1range__t_aa16e18d4ea94674c40e7c33586b4a9de}{00386}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1range__t_aa16e18d4ea94674c40e7c33586b4a9de}{size}}() const noexcept -\/> \mbox{\hyperlink{namespacestd}{std}}::\textcolor{keywordtype}{size\_t} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00387}00387 \textcolor{keywordflow}{return} \textcolor{keyword}{static\_cast<}std::size\_t\textcolor{keyword}{>}(std::abs(\mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}} -\/ \mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}}) / step);} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00388}00388 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00389}00389 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00393}\mbox{\hyperlink{classkblib_1_1range__t_a40a7672ee50f6f1823e177d674df8a4c}{00393}} \textcolor{keyword}{friend} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1range__t_a40a7672ee50f6f1823e177d674df8a4c}{begin}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1range__t}{range\_t}}\& r) \textcolor{keyword}{noexcept} -\/> \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00394}00394 \textcolor{keywordflow}{return} \{r.min, r.\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_ae59bccc6efff736de76994dd18125d9f}{step}}\};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00395}00395 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00399}\mbox{\hyperlink{classkblib_1_1range__t_a725f198750193671043f4a1ce06547e1}{00399}} \textcolor{keyword}{friend} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1range__t_a725f198750193671043f4a1ce06547e1}{end}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1range__t}{range\_t}}\& r) \textcolor{keyword}{noexcept} -\/> \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00400}00400 \textcolor{keywordflow}{return} \{r.max, r.\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_ae59bccc6efff736de76994dd18125d9f}{step}}\};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00401}00401 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00402}00402 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00406}\mbox{\hyperlink{classkblib_1_1range__t_a1bc83d205dc56fe68f676e7f23c09f60}{00406}} \textcolor{keyword}{friend} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1range__t_a1bc83d205dc56fe68f676e7f23c09f60}{size}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1range__t}{range\_t}}\& r) \textcolor{keyword}{noexcept} -\/> std::size\_t \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00407}00407 \textcolor{keywordflow}{return} (r.max -\/ r.min) / r.step;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00408}00408 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00409}00409 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00413}\mbox{\hyperlink{classkblib_1_1range__t_a97e080e5dba3337466df2f2cbed97cee}{00413}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1range__t_a97e080e5dba3337466df2f2cbed97cee}{empty}}() const noexcept -\/> \textcolor{keywordtype}{bool} \{ \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_1_1fakestd_adb8781bc0e5d1ba4ca4624293c0c98ae}{size}}() == 0; \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00414}00414 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00415}00415 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Integral>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00416}\mbox{\hyperlink{classkblib_1_1range__t_a277f45f3498f7cdac0e3f1852e89d89b}{00416}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1range__t_a277f45f3498f7cdac0e3f1852e89d89b}{operator[]}}(Integral x) \textcolor{keyword}{const} \textcolor{keyword}{noexcept}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00417}00417 -\/> \textcolor{keyword}{decltype}(begin()[x]) \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00418}00418 \textcolor{keywordflow}{return} begin()[x];} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00419}00419 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00420}00420 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00421}\mbox{\hyperlink{classkblib_1_1range__t_a4e3345239799479144706b6e75ec32db}{00421}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1range__t_a4e3345239799479144706b6e75ec32db}{lesser}}() const noexcept(nothrow\_copyable) -\/> Value \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00422}00422 \textcolor{keywordflow}{return} (step > 0) ? \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}} : \mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00423}00423 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00424}00424 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00425}\mbox{\hyperlink{classkblib_1_1range__t_a9b4773530795da0c585118301ccbe703}{00425}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1range__t_a9b4773530795da0c585118301ccbe703}{greater}}() const noexcept(nothrow\_copyable) -\/> Value \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00426}00426 \textcolor{keywordflow}{return} (step > 0) ? \mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}} : \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00427}00427 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00428}00428 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00432}00432 \textcolor{keyword}{template} <} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00433}00433 \textcolor{keyword}{typename} Container,} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00434}00434 \mbox{\hyperlink{namespacekblib_a366272ad8baad19be4ccf8128afb04a3}{enable\_if\_t}}<} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00435}00435 is\_linear\_container\_v<} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00436}00436 Container> and std::is\_constructible::value>* = \textcolor{keyword}{nullptr}>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00437}\mbox{\hyperlink{classkblib_1_1range__t_a339ff51d207ffdcdf390f60b80b554bc}{00437}} \textcolor{keyword}{explicit} \textcolor{keyword}{operator} Container() const} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00438}00438 noexcept(noexcept(Container(\mbox{\hyperlink{namespacestd}{std}}::declval<\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}}>(),} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00439}00439 \mbox{\hyperlink{namespacestd}{std}}::declval<\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}}>()))) \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00440}00440 \textcolor{keywordflow}{return} Container(begin(), end());} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00441}00441 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00442}00442 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00446}00446 \textcolor{keyword}{template} <} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00447}00447 \textcolor{keyword}{typename} Container,} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00448}00448 \mbox{\hyperlink{namespacekblib_a366272ad8baad19be4ccf8128afb04a3}{enable\_if\_t}}<} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00449}00449 is\_setlike\_v<} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00450}00450 Container> and std::is\_constructible::value>* = \textcolor{keyword}{nullptr}>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00451}\mbox{\hyperlink{classkblib_1_1range__t_a339ff51d207ffdcdf390f60b80b554bc}{00451}} \textcolor{keyword}{explicit} \textcolor{keyword}{operator} Container() const} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00452}00452 noexcept(noexcept(Container(\mbox{\hyperlink{namespacestd}{std}}::declval<\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}}>(),} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00453}00453 \mbox{\hyperlink{namespacestd}{std}}::declval<\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}}>()))) \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00454}00454 \textcolor{keywordflow}{return} Container(begin(), end());} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00455}00455 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00456}00456 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00462}\mbox{\hyperlink{classkblib_1_1range__t_ab49e34be5a3c024d4c978c02b30a8e8c}{00462}} \textcolor{keyword}{constexpr} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1range__t_ab49e34be5a3c024d4c978c02b30a8e8c}{operator==}}(\mbox{\hyperlink{classkblib_1_1range__t}{range\_t}} l, \mbox{\hyperlink{classkblib_1_1range__t}{range\_t}} r) \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{bool} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00463}00463 \textcolor{keywordflow}{return} (l.empty() and r.empty())} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00464}00464 or ((l.begin() == r.begin()) and (l.end() == r.end())} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00465}00465 and (l.step == r.step));} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00466}00466 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00472}\mbox{\hyperlink{classkblib_1_1range__t_abbaa2e24023c9366928dd4b5473db026}{00472}} \textcolor{keyword}{constexpr} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1range__t_abbaa2e24023c9366928dd4b5473db026}{operator!=}}(\mbox{\hyperlink{classkblib_1_1range__t}{range\_t}} l, \mbox{\hyperlink{classkblib_1_1range__t}{range\_t}} r) \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{bool} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00473}00473 \textcolor{keywordflow}{return} not (l == r);} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00474}00474 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00475}00475 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00476}00476 \textcolor{keyword}{private}:} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00477}00477 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00478}00478 \textcolor{keyword}{static} \textcolor{keyword}{constexpr} \mbox{\hyperlink{namespacekblib_a366272ad8baad19be4ccf8128afb04a3}{enable\_if\_t::value}}, std::true\_type>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00479}00479 positive(\textcolor{keyword}{const} T\&) \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00480}00480 \textcolor{keywordflow}{return} \{\};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00481}00481 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00482}00482 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00483}00483 \textcolor{keyword}{static} \textcolor{keyword}{constexpr} enable\_if\_t::value, \textcolor{keywordtype}{bool}> positive(T v) \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00484}00484 \textcolor{keywordflow}{return} v >= 0;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00485}00485 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00486}00486 \textcolor{keyword}{template} <\textcolor{keyword}{typename} R, \textcolor{keyword}{typename} T,} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00487}00487 enable\_if\_t::value} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00488}00488 and std::is\_integral::value>* = \textcolor{keyword}{nullptr}>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00489}00489 \textcolor{keyword}{static} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_accb66942cbfbca80c254045501c96cc9}{signed\_cast}}(T v) \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00490}00490 \textcolor{keywordflow}{return} kblib::signed\_cast(v);} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00491}00491 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00492}00492 \textcolor{keyword}{template} <\textcolor{keyword}{typename} R, \textcolor{keyword}{typename} T,} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00493}00493 \mbox{\hyperlink{namespacekblib_a366272ad8baad19be4ccf8128afb04a3}{enable\_if\_t}}::value} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00494}00494 and std::is\_integral::value)>* = \textcolor{keyword}{nullptr}>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00495}00495 \textcolor{keyword}{static} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_accb66942cbfbca80c254045501c96cc9}{signed\_cast}}(T v) \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00496}00496 \textcolor{keywordflow}{return} v;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00497}00497 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00498}00498 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00499}00499 \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} normalize() noexcept(nothrow\_steppable) -\/> \textcolor{keywordtype}{void} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00500}00500 \textcolor{keywordflow}{if} (\mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}} == \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}}) \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00501}00501 \} \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (step == 0) \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00502}00502 \textcolor{keywordflow}{if} (\mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}} != \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{std::numeric\_limits::max}}()) \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00503}00503 \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}} = \mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}} + 1;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00504}00504 \} \textcolor{keywordflow}{else} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00505}00505 \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}} = \mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}} -\/ 1;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00506}00506 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00507}00507 \} \textcolor{keywordflow}{else} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00508}00508 \textcolor{preprocessor}{\#pragma GCC diagnostic push}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00509}00509 \textcolor{preprocessor}{\#pragma GCC diagnostic ignored "{}-\/Wsign-\/conversion"{}}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00510}00510 \textcolor{preprocessor}{\#pragma GCC diagnostic ignored "{}-\/Wconversion"{}}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00511}00511 \textcolor{preprocessor}{\#pragma GCC diagnostic ignored "{}-\/Wsign-\/compare"{}}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00512}00512 \textcolor{preprocessor}{\#pragma GCC diagnostic ignored "{}-\/Wimplicit-\/int-\/conversion"{}}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00513}00513 \textcolor{preprocessor}{\#pragma GCC diagnostic ignored "{}-\/Wshorten-\/64-\/to-\/32"{}}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00514}00514 \textcolor{keyword}{auto} difference = \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}} -\/ \mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00515}00515 std::ptrdiff\_t sign = (step > 0) ? 1 : -\/1;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00516}00516 \textcolor{keywordflow}{if} ((sign * \mbox{\hyperlink{namespacekblib_a1909a64960663825ccc4eb98e4637df2}{to\_signed}}(difference)) <= (sign * step)) \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00517}00517 step = sign;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00518}00518 \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}} = \mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}} + step;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00519}00519 \} \textcolor{keywordflow}{else} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00520}00520 \textcolor{keyword}{auto} remainder = difference \% step;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00521}00521 \textcolor{keywordflow}{if} (remainder != 0) \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00522}00522 \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}} = \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}} -\/ remainder;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00523}00523 assert(not (positive(\mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}})} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00524}00524 and (signed\_cast(} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00525}00525 \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{std::numeric\_limits::max}}() -\/ \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}})} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00526}00526 < step)));} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00527}00527 \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}} = \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}} + step;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00528}00528 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00529}00529 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00530}00530 \textcolor{preprocessor}{\#pragma GCC diagnostic pop}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00531}00531 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00532}00532 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00533}00533 \};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00534}00534 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00535}\mbox{\hyperlink{namespacekblib_1_1detail__iterators}{00535}} \textcolor{keyword}{namespace }detail\_iterators \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00536}00536 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, \textcolor{keyword}{typename} U, \textcolor{keyword}{typename} = \textcolor{keywordtype}{void}>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00537}\mbox{\hyperlink{structkblib_1_1detail__iterators_1_1is__addable}{00537}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1detail__iterators_1_1is__addable}{is\_addable}} : std::false\_type \{\};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00538}00538 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00539}00539 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, \textcolor{keyword}{typename} U>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00540}\mbox{\hyperlink{structkblib_1_1detail__iterators_1_1is__addable_3_01_t_00_01_u_00_01void__t_3_01decltype_07std_154f3f86b521bad5734a3fe6bbf63c54f}{00540}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1detail__iterators_1_1is__addable}{is\_addable}}() + std::declval())>>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00542}00542 : std::true\_type \{\};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00543}00543 \} \textcolor{comment}{// namespace detail\_iterators}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00544}00544 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00545}\mbox{\hyperlink{structkblib_1_1adjuster}{00545}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1adjuster}{adjuster}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00546}\mbox{\hyperlink{structkblib_1_1adjuster_a9c5245dad8f70a17fe352274bec753dc}{00546}} std::ptrdiff\_t \mbox{\hyperlink{structkblib_1_1adjuster_a9c5245dad8f70a17fe352274bec753dc}{adj}};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00547}\mbox{\hyperlink{structkblib_1_1adjuster_a2d023cea34c7cb293f9e2c23b076d0d3}{00547}} \textcolor{keyword}{constexpr} \mbox{\hyperlink{structkblib_1_1adjuster_a2d023cea34c7cb293f9e2c23b076d0d3}{adjuster}}(std::ptrdiff\_t adj\_) noexcept} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00548}00548 : adj(adj\_) \{\}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00549}\mbox{\hyperlink{structkblib_1_1adjuster_a6b7f68c785f836428eb8629a9491b8f9}{00549}} \textcolor{keyword}{constexpr} \textcolor{keyword}{operator} std::ptrdiff\_t() const noexcept \{ \textcolor{keywordflow}{return} adj; \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00550}00550 \};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00551}00551 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00552}00552 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00553}\mbox{\hyperlink{namespacekblib_a5127cbe40846f5ab2a05694de92d3d2e}{00553}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_ab8c4154f71801dac0f43dcb2e1869e8b}{operator+}}(T val, \mbox{\hyperlink{structkblib_1_1adjuster}{adjuster}} \mbox{\hyperlink{namespacekblib_a22831dce77d5f35c13930b5e30a59f07}{a}}) \textcolor{keyword}{noexcept}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00554}00554 -\/> \mbox{\hyperlink{namespacekblib_a366272ad8baad19be4ccf8128afb04a3}{enable\_if\_t::value}},} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00555}00555 \textcolor{keyword}{decltype}(std::advance(val, \mbox{\hyperlink{namespacekblib_a22831dce77d5f35c13930b5e30a59f07}{a}}.adj))> \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00556}00556 \textcolor{keywordflow}{return} std::advance(val, \mbox{\hyperlink{namespacekblib_a22831dce77d5f35c13930b5e30a59f07}{a}}.adj);} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00557}00557 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00558}00558 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00563}\mbox{\hyperlink{structkblib_1_1incrementer}{00563}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1incrementer}{incrementer}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00564}\mbox{\hyperlink{structkblib_1_1incrementer_a6e22ffadc3504ed1c26f719c37dee0da}{00564}} \textcolor{keyword}{constexpr} \mbox{\hyperlink{structkblib_1_1incrementer_a6e22ffadc3504ed1c26f719c37dee0da}{incrementer}}() noexcept = default;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00565}\mbox{\hyperlink{structkblib_1_1incrementer_a830bff4684dd37096b898cb4bc721dd4}{00565}} constexpr \mbox{\hyperlink{structkblib_1_1incrementer}{incrementer}}(\textcolor{keywordtype}{int}) noexcept \{\}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00566}\mbox{\hyperlink{structkblib_1_1incrementer_a89cc6962471129551334b307f1e5c9e1}{00566}} \textcolor{keyword}{constexpr} \textcolor{keyword}{operator} int() const noexcept \{ \textcolor{keywordflow}{return} 1; \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00567}\mbox{\hyperlink{structkblib_1_1incrementer_ac5650dea10eb78921b499895d9e352c1}{00567}} \textcolor{keyword}{friend} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1incrementer_ac5650dea10eb78921b499895d9e352c1}{operator*}}(std::ptrdiff\_t x, \mbox{\hyperlink{structkblib_1_1incrementer}{incrementer}}) \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00568}00568 \textcolor{keywordflow}{return} \mbox{\hyperlink{structkblib_1_1adjuster}{adjuster}}\{x\};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00569}00569 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00570}00570 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00571}00571 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00572}\mbox{\hyperlink{structkblib_1_1incrementer_aaa867d341b158ed46a8bdc6b525fe159}{00572}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1incrementer_aaa867d341b158ed46a8bdc6b525fe159}{operator()}}(T\& t) -\/> T\& \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00573}00573 \textcolor{keywordflow}{return} ++t;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00574}00574 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00575}00575 \};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00576}00576 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00580}00580 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00581}\mbox{\hyperlink{namespacekblib_ab797e9d5c5989c277312518fc95667ae}{00581}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_ab8c4154f71801dac0f43dcb2e1869e8b}{operator+}}(T val, \mbox{\hyperlink{structkblib_1_1incrementer}{incrementer}}) -\/> T \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00582}00582 \textcolor{keywordflow}{return} ++val;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00583}00583 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00584}00584 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00589}\mbox{\hyperlink{structkblib_1_1decrementer}{00589}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1decrementer}{decrementer}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00590}\mbox{\hyperlink{structkblib_1_1decrementer_a9d51ac86883ff3161020304f31a65004}{00590}} \textcolor{keyword}{constexpr} \mbox{\hyperlink{structkblib_1_1decrementer_a9d51ac86883ff3161020304f31a65004}{decrementer}}() noexcept = default;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00591}\mbox{\hyperlink{structkblib_1_1decrementer_a0238f259021b327a61e7e08c919f7b6b}{00591}} constexpr \mbox{\hyperlink{structkblib_1_1decrementer}{decrementer}}(\textcolor{keywordtype}{int}) noexcept \{\}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00592}\mbox{\hyperlink{structkblib_1_1decrementer_a040c6a4307291cba6da8b9e0be914cb4}{00592}} \textcolor{keyword}{constexpr} \textcolor{keyword}{operator} int() const noexcept \{ \textcolor{keywordflow}{return} -\/1; \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00593}\mbox{\hyperlink{structkblib_1_1decrementer_a2bd9f4a70b2024ae47fe726eedb33faf}{00593}} \textcolor{keyword}{friend} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1decrementer_a2bd9f4a70b2024ae47fe726eedb33faf}{operator*}}(std::ptrdiff\_t x, \mbox{\hyperlink{structkblib_1_1decrementer}{decrementer}}) \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00594}00594 \textcolor{keywordflow}{return} \mbox{\hyperlink{structkblib_1_1adjuster}{adjuster}}\{-\/x\};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00595}00595 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00596}00596 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00597}\mbox{\hyperlink{structkblib_1_1decrementer_aadf94708e26cb234eace1fd2e8054a06}{00597}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1decrementer_aadf94708e26cb234eace1fd2e8054a06}{operator()}}(T\& t) -\/> T\& \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00598}00598 \textcolor{keywordflow}{return} -\/-\/t;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00599}00599 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00600}00600 \};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00601}00601 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00605}00605 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00606}\mbox{\hyperlink{namespacekblib_ab8c4154f71801dac0f43dcb2e1869e8b}{00606}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_ab8c4154f71801dac0f43dcb2e1869e8b}{operator+}}(T val, \mbox{\hyperlink{structkblib_1_1decrementer}{decrementer}}) -\/> T \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00607}00607 \textcolor{keywordflow}{return} -\/-\/val;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00608}00608 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00609}00609 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00620}00620 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Value, \textcolor{keyword}{typename} Delta = \textcolor{keywordtype}{int}>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00621}\mbox{\hyperlink{namespacekblib_a72690688922a2d4ae9a3e46ff0c1a9a9}{00621}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_ac136a707b14a83235d82c267830f0cd9}{range}}(Value \mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}}, Value \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}}, Delta step = 0)} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00622}00622 -\/> \mbox{\hyperlink{classkblib_1_1range__t}{range\_t}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00623}00623 \textcolor{keywordflow}{if} (step == 0) \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00624}00624 \textcolor{keywordflow}{if} (\mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}} <= \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}}) \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00625}00625 \textcolor{keywordflow}{return} \{\mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}}, \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}}, 1\};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00626}00626 \} \textcolor{keywordflow}{else} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00627}00627 \textcolor{keywordflow}{return} \{\mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}}, \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}}, -\/1\};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00628}00628 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00629}00629 \} \textcolor{keywordflow}{else} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00630}00630 \textcolor{keywordflow}{return} \{\mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}}, \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}}, step\};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00631}00631 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00632}00632 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00633}00633 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00641}00641 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Value>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00642}\mbox{\hyperlink{namespacekblib_ac136a707b14a83235d82c267830f0cd9}{00642}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_ac136a707b14a83235d82c267830f0cd9}{range}}(Value \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}}) -\/> \mbox{\hyperlink{classkblib_1_1range__t}{range\_t}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00643}00643 \textcolor{keywordflow}{return} \{\mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}}\};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00644}00644 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00645}00645 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00646}00646 \textcolor{preprocessor}{\#if KBLIB\_USE\_CXX17}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00647}00647 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00648}00648 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Value, \textcolor{keyword}{typename} Delta>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00649}\mbox{\hyperlink{classkblib_1_1irange__t}{00649}} \textcolor{keyword}{class }\mbox{\hyperlink{classkblib_1_1irange__t}{irange\_t}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00650}00650 \textcolor{keyword}{public}:} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00651}\mbox{\hyperlink{classkblib_1_1irange__t_a51e845a7e877768715aeb6e56758b2b6}{00651}} Value \mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}}, \mbox{\hyperlink{classkblib_1_1irange__t_a51e845a7e877768715aeb6e56758b2b6}{max}};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00652}\mbox{\hyperlink{classkblib_1_1irange__t_a2099a40174e590953d93b5adeeeb36f3}{00652}} Delta \mbox{\hyperlink{classkblib_1_1irange__t_a2099a40174e590953d93b5adeeeb36f3}{step}};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00653}00653 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00654}\mbox{\hyperlink{classkblib_1_1irange__t_a743c4292094d77c648a3c9781c62e1ed}{00654}} \textcolor{keyword}{constexpr} \textcolor{keyword}{static} \textcolor{keywordtype}{bool} nothrow\_copyable} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00655}00655 = std::is\_nothrow\_copy\_constructible::value;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00656}\mbox{\hyperlink{classkblib_1_1irange__t_affa30cf3b7882ba17e2ef75d6c93f617}{00656}} \textcolor{keyword}{constexpr} \textcolor{keyword}{static} \textcolor{keywordtype}{bool} nothrow\_steppable = \textcolor{keyword}{noexcept}(\mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}} + step);} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00657}00657 \};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00658}00658 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00659}00659 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Value, \textcolor{keyword}{typename} Delta = \textcolor{keywordtype}{int}>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00660}\mbox{\hyperlink{namespacekblib_a75ac0367cce25b0498451e5e5c711297}{00660}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a75ac0367cce25b0498451e5e5c711297}{irange}}(Value, Value, Delta = 0) \{\}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00661}00661 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00662}00662 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00663}00663 \textcolor{keyword}{class }enumerator\_iterator;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00664}00664 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00668}\mbox{\hyperlink{namespacekblib_1_1detail__enumerate}{00668}} \textcolor{keyword}{namespace }detail\_enumerate \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00669}00669 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00670}00670 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T1, \textcolor{keyword}{typename} T2>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00671}\mbox{\hyperlink{namespacekblib_1_1detail__enumerate_ac4e2d91f1419790b70ee4fcc9ba0fdff}{00671}} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_1_1detail__enumerate_ac4e2d91f1419790b70ee4fcc9ba0fdff}{get\_or}}(T1\&\& t1, T2\&\& t2) -\/> \textcolor{keyword}{decltype}(\textcolor{keyword}{auto}) \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00672}00672 \textcolor{keywordflow}{return} t1 ? *t1 : *t2;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00673}00673 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00674}00674 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00675}\mbox{\hyperlink{structkblib_1_1detail__enumerate_1_1force__copy__tag}{00675}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1detail__enumerate_1_1force__copy__tag}{force\_copy\_tag}} \{\};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00676}00676 \textcolor{comment}{// Get a pointer which is guaranteed to be invalid to use (but not UB to}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00677}00677 \textcolor{comment}{// merely store)}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00678}00678 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00679}\mbox{\hyperlink{namespacekblib_1_1detail__enumerate_a01999a441ce3915f1d6c2c85b6f650d4}{00679}} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_1_1detail__enumerate_a01999a441ce3915f1d6c2c85b6f650d4}{get\_magic\_ptr}}() -\/> T* \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00680}00680 \textcolor{keyword}{static} \textcolor{keyword}{const} \textcolor{keywordtype}{char} enumeration\_magic\_pointer = \textcolor{charliteral}{'\(\backslash\)0'};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00681}00681 \textcolor{keywordflow}{return} \textcolor{keyword}{reinterpret\_cast<}T*\textcolor{keyword}{>}(} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00682}00682 \textcolor{keyword}{const\_cast<}\textcolor{keywordtype}{char}*\textcolor{keyword}{>}(\&enumeration\_magic\_pointer));} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00683}00683 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00684}00684 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00685}00685 \} \textcolor{comment}{// namespace detail\_enumerate}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00686}00686 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00687}00687 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00688}\mbox{\hyperlink{classkblib_1_1enumeration}{00688}} \textcolor{keyword}{class }\mbox{\hyperlink{classkblib_1_1enumeration}{enumeration}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00689}00689 \textcolor{keyword}{public}:} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00690}\mbox{\hyperlink{classkblib_1_1enumeration_a9f1a9a31f43193c68dafbec43428515b}{00690}} \mbox{\hyperlink{classkblib_1_1enumeration_a9f1a9a31f43193c68dafbec43428515b}{enumeration}}() = \textcolor{keywordflow}{default};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00691}00691 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00692}\mbox{\hyperlink{classkblib_1_1enumeration_a9a7e10caa6fa6995d4910165c0bdd782}{00692}} \mbox{\hyperlink{classkblib_1_1enumeration_a9a7e10caa6fa6995d4910165c0bdd782}{enumeration}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1enumeration}{enumeration}}\& other)} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00693}00693 : idx(other.idx)} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00694}00694 , local([\&] \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00695}00695 assert(other.source or other.local);} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00696}00696 assert(other.source != detail\_enumerate::get\_magic\_ptr());} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00697}00697 \textcolor{keywordflow}{return} other.\mbox{\hyperlink{classkblib_1_1enumeration_a0db1eb096e86386ef5498ea248b7d966}{copied}}();} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00698}00698 \}())} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00699}00699 , source(\textcolor{keyword}{nullptr}) \{\}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00700}\mbox{\hyperlink{classkblib_1_1enumeration_a48dea8dc9b7305c9d5ac11f97801754b}{00700}} \mbox{\hyperlink{classkblib_1_1enumeration_a48dea8dc9b7305c9d5ac11f97801754b}{enumeration}}(\textcolor{keyword}{volatile} \mbox{\hyperlink{classkblib_1_1enumeration}{enumeration}}\& other)} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00701}00701 : \mbox{\hyperlink{classkblib_1_1enumeration}{enumeration}}(const\_cast(other)) \{\}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00702}00702 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00703}\mbox{\hyperlink{classkblib_1_1enumeration_ac46ce62229fc0860d76b45a334cdbdcb}{00703}} \mbox{\hyperlink{classkblib_1_1enumeration_ac46ce62229fc0860d76b45a334cdbdcb}{enumeration}}(\mbox{\hyperlink{classkblib_1_1enumeration}{enumeration}}\&\&) = \textcolor{keyword}{delete};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00704}\mbox{\hyperlink{classkblib_1_1enumeration_a0207f4c0d30bcd3ea31f6dd735086722}{00704}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1enumeration_a0207f4c0d30bcd3ea31f6dd735086722}{operator=}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1enumeration}{enumeration}}\&) = \textcolor{keyword}{delete};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00705}\mbox{\hyperlink{classkblib_1_1enumeration_a3378b0d743025f609c0bb7f1b8e29a4d}{00705}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1enumeration_a3378b0d743025f609c0bb7f1b8e29a4d}{operator=}}(\mbox{\hyperlink{classkblib_1_1enumeration}{enumeration}}\&\&) = \textcolor{keyword}{delete};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00706}00706 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00707}\mbox{\hyperlink{classkblib_1_1enumeration_a975ae59ac82b62d55c41e6e6f6a22bfa}{00707}} \mbox{\hyperlink{classkblib_1_1enumeration_a975ae59ac82b62d55c41e6e6f6a22bfa}{\string~enumeration}}() = \textcolor{keywordflow}{default};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00708}00708 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00709}00709 \textcolor{keyword}{private}:} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00710}00710 \mbox{\hyperlink{classkblib_1_1enumeration}{enumeration}}(\mbox{\hyperlink{structkblib_1_1detail__enumerate_1_1force__copy__tag}{detail\_enumerate::force\_copy\_tag}}, std::size\_t i)} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00711}00711 : idx(i) \{\}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00712}00712 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00713}00713 \textcolor{keyword}{public}:} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00714}\mbox{\hyperlink{classkblib_1_1enumeration_a46009b4c2b93bee9a082cb432ae5a3ba}{00714}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1enumeration_a46009b4c2b93bee9a082cb432ae5a3ba}{index}}() const noexcept -\/> \mbox{\hyperlink{namespacestd}{std}}::\textcolor{keywordtype}{size\_t} \{ \textcolor{keywordflow}{return} idx; \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00715}00715 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00716}\mbox{\hyperlink{classkblib_1_1enumeration_a0db1eb096e86386ef5498ea248b7d966}{00716}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1enumeration_a0db1eb096e86386ef5498ea248b7d966}{copied}}() \& \textcolor{keyword}{noexcept} -\/> std::remove\_const\_t\& \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00717}00717 assert(source != detail\_enumerate::get\_magic\_ptr());} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00718}00718 assert(local);} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00719}00719 \textcolor{keywordflow}{return} *local;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00720}00720 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00721}\mbox{\hyperlink{classkblib_1_1enumeration_a5bead6ac445174dcd2ad1ec08e4b4e8d}{00721}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1enumeration_a5bead6ac445174dcd2ad1ec08e4b4e8d}{copied}}() const\& noexcept -\/> const T\& \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00722}00722 assert(source != detail\_enumerate::get\_magic\_ptr());} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00723}00723 \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_1_1detail__enumerate_ac4e2d91f1419790b70ee4fcc9ba0fdff}{detail\_enumerate::get\_or}}(local, source);} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00724}00724 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00725}00725 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00726}\mbox{\hyperlink{classkblib_1_1enumeration_a3d336565b478dddf18494ed2c90ccedf}{00726}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1enumeration_a3d336565b478dddf18494ed2c90ccedf}{reffed}}() \& \textcolor{keyword}{noexcept} -\/> T\& \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00727}00727 assert(source != detail\_enumerate::get\_magic\_ptr());} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00728}00728 \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_1_1detail__enumerate_ac4e2d91f1419790b70ee4fcc9ba0fdff}{detail\_enumerate::get\_or}}(local, source);} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00729}00729 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00730}\mbox{\hyperlink{classkblib_1_1enumeration_a5f0c008db095d268a70603626303da0c}{00730}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1enumeration_a5f0c008db095d268a70603626303da0c}{reffed}}() const\& noexcept -\/> const T\& \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00731}00731 assert(source != detail\_enumerate::get\_magic\_ptr());} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00732}00732 \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_1_1detail__enumerate_ac4e2d91f1419790b70ee4fcc9ba0fdff}{detail\_enumerate::get\_or}}(local, source);} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00733}00733 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00734}00734 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00735}00735 \textcolor{keyword}{private}:} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00736}00736 \textcolor{keyword}{auto} set(T* t) \& -\/> \textcolor{keywordtype}{void} \{ source = t; \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00737}00737 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00738}00738 \textcolor{keyword}{auto} advance() \& \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{void} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00739}00739 ++idx;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00740}00740 source = detail\_enumerate::get\_magic\_ptr();} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00741}00741 local = std::nullopt;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00742}00742 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00743}00743 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00744}00744 std::size\_t idx = 0;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00745}00745 \textcolor{keyword}{mutable} std::optional> local = std::nullopt;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00746}00746 T* source = detail\_enumerate::get\_magic\_ptr();} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00747}00747 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00748}00748 \textcolor{keyword}{template} <\textcolor{keyword}{typename}>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00749}\mbox{\hyperlink{classkblib_1_1enumeration_a6dd8e668aab608987b6c0fabbb2689eb}{00749}} \textcolor{keyword}{friend} \textcolor{keyword}{class }\mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator}};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00750}00750 \};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00751}00751 \} \textcolor{comment}{// namespace kblib}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00752}00752 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00753}00753 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacestd}{std}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00754}00754 \textcolor{preprocessor}{\# if defined(\_\_clang\_\_)}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00755}00755 \textcolor{comment}{// Fix from: https://github.com/nlohmann/json/issues/1401}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00756}00756 \textcolor{preprocessor}{\# pragma clang diagnostic push}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00757}00757 \textcolor{preprocessor}{\# pragma clang diagnostic ignored "{}-\/Wmismatched-\/tags"{}}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00758}00758 \textcolor{preprocessor}{\# endif}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00759}00759 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00760}00760 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00761}\mbox{\hyperlink{classstd_1_1tuple__size_3_1_1kblib_1_1enumeration_3_01_t_01_4_01_4}{00761}} \textcolor{keyword}{class }tuple\_size<::\mbox{\hyperlink{classkblib_1_1enumeration}{kblib::enumeration}}>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00762}00762 : \textcolor{keyword}{public} std::integral\_constant \{\};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00763}00763 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00764}00764 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00765}\mbox{\hyperlink{classstd_1_1tuple__element_3_010_00_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4}{00765}} \textcolor{keyword}{class }tuple\_element<0, ::\mbox{\hyperlink{classkblib_1_1enumeration}{kblib::enumeration}}> \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00766}00766 \textcolor{keyword}{public}:} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00767}\mbox{\hyperlink{classstd_1_1tuple__element_3_010_00_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4_a5ffbe665f94da52faae19913e1c6b4b4}{00767}} \textcolor{keyword}{using }\mbox{\hyperlink{classstd_1_1tuple__element_3_010_00_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4_a5ffbe665f94da52faae19913e1c6b4b4}{type}} = std::size\_t;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00768}00768 \};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00769}00769 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00770}\mbox{\hyperlink{classstd_1_1tuple__element_3_010_00_01volatile_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4}{00770}} \textcolor{keyword}{class }tuple\_element<0, volatile ::\mbox{\hyperlink{classkblib_1_1enumeration}{kblib::enumeration}}> \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00771}00771 \textcolor{keyword}{public}:} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00772}\mbox{\hyperlink{classstd_1_1tuple__element_3_010_00_01volatile_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4_a56170bacd225380db58a1577896e2aff}{00772}} \textcolor{keyword}{using }\mbox{\hyperlink{classstd_1_1tuple__element_3_010_00_01volatile_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4_a56170bacd225380db58a1577896e2aff}{type}} = std::size\_t;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00773}00773 \};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00774}00774 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00775}\mbox{\hyperlink{classstd_1_1tuple__element_3_010_00_01const_01volatile_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4}{00775}} \textcolor{keyword}{class }tuple\_element<0, const volatile ::\mbox{\hyperlink{classkblib_1_1enumeration}{kblib::enumeration}}> \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00776}00776 \textcolor{keyword}{public}:} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00777}\mbox{\hyperlink{classstd_1_1tuple__element_3_010_00_01const_01volatile_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4_a839f00a197f6e882d3c40e3a9bdb460c}{00777}} \textcolor{keyword}{using }\mbox{\hyperlink{classstd_1_1tuple__element_3_010_00_01const_01volatile_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4_a839f00a197f6e882d3c40e3a9bdb460c}{type}} = \textcolor{keyword}{const} std::size\_t;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00778}00778 \};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00779}00779 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00783}00783 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00784}\mbox{\hyperlink{classstd_1_1tuple__element_3_011_00_01volatile_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4}{00784}} \textcolor{keyword}{class }tuple\_element<1, volatile ::\mbox{\hyperlink{classkblib_1_1enumeration}{kblib::enumeration}}> \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00785}00785 \textcolor{keyword}{public}:} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00786}\mbox{\hyperlink{classstd_1_1tuple__element_3_011_00_01volatile_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4_a2978d73ee95306831126cd98dc23fbdb}{00786}} \textcolor{keyword}{using }\mbox{\hyperlink{classstd_1_1tuple__element_3_011_00_01volatile_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4_a2978d73ee95306831126cd98dc23fbdb}{type}} = T;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00787}00787 \};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00791}00791 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00792}\mbox{\hyperlink{classstd_1_1tuple__element_3_011_00_01const_01volatile_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4}{00792}} \textcolor{keyword}{class }tuple\_element<1, const volatile ::\mbox{\hyperlink{classkblib_1_1enumeration}{kblib::enumeration}}> \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00793}00793 \textcolor{keyword}{public}:} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00794}\mbox{\hyperlink{classstd_1_1tuple__element_3_011_00_01const_01volatile_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4_af95e18b723c518d24d5e49b977e6efc9}{00794}} \textcolor{keyword}{using }\mbox{\hyperlink{classstd_1_1tuple__element_3_011_00_01const_01volatile_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4_af95e18b723c518d24d5e49b977e6efc9}{type}} = \textcolor{keyword}{const} T;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00795}00795 \};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00799}00799 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00800}\mbox{\hyperlink{classstd_1_1tuple__element_3_011_00_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4}{00800}} \textcolor{keyword}{class }tuple\_element<1, ::\mbox{\hyperlink{classkblib_1_1enumeration}{kblib::enumeration}}> \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00801}00801 \textcolor{keyword}{public}:} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00802}\mbox{\hyperlink{classstd_1_1tuple__element_3_011_00_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4_aa612d8c7d0531f5bfbf30a1c81040daf}{00802}} \textcolor{keyword}{using }\mbox{\hyperlink{classstd_1_1tuple__element_3_011_00_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4_aa612d8c7d0531f5bfbf30a1c81040daf}{type}} = std::remove\_const\_t;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00803}00803 \};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00807}00807 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00808}\mbox{\hyperlink{classstd_1_1tuple__element_3_011_00_01const_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4}{00808}} \textcolor{keyword}{class }tuple\_element<1, const ::\mbox{\hyperlink{classkblib_1_1enumeration}{kblib::enumeration}}> \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00809}00809 \textcolor{keyword}{public}:} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00810}\mbox{\hyperlink{classstd_1_1tuple__element_3_011_00_01const_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4_a361773cb91169c2cc2ab09b0bdc63caa}{00810}} \textcolor{keyword}{using }\mbox{\hyperlink{classstd_1_1tuple__element_3_011_00_01const_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4_a361773cb91169c2cc2ab09b0bdc63caa}{type}} = \textcolor{keyword}{const} T;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00811}00811 \};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00812}00812 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00813}00813 \textcolor{preprocessor}{\# if defined(\_\_clang\_\_)}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00814}00814 \textcolor{preprocessor}{\# pragma clang diagnostic pop}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00815}00815 \textcolor{preprocessor}{\# endif}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00816}00816 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00817}00817 \} \textcolor{comment}{// namespace std}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00818}00818 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00819}00819 \textcolor{keyword}{namespace }\mbox{\hyperlink{tdecl_8h_a4b5c574c663a392148218cd4410fd7a1}{KBLIB\_NS}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00820}00820 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00821}00821 \textcolor{comment}{// When a structured binding is created by value, this function is called as if}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00822}00822 \textcolor{comment}{// by get(std::move(e)), so it does not call the lvalue reference function.}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00823}00823 \textcolor{comment}{// I have no idea why it's implicitly moved, but it works for my purposes.}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00824}00824 \textcolor{keyword}{template} } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00825}\mbox{\hyperlink{namespacekblib_a554b8034891b88291ee4014c5618e41f}{00825}} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a2888a4a5d49c15f73ced60c66c31dc15}{get}}(\mbox{\hyperlink{classkblib_1_1enumeration}{enumeration}}\&\& \mbox{\hyperlink{namespacekblib_a536badb265b62a85034f48e0eac76a1b}{e}}) -\/> \textcolor{keyword}{decltype}(\textcolor{keyword}{auto}) \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00826}00826 \textcolor{keyword}{static\_assert}(I <= 1, \textcolor{stringliteral}{"{}enumeration only has two elements"{}});} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00827}00827 \textcolor{keywordflow}{if} \textcolor{keyword}{constexpr} (I == 0) \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00828}00828 \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a536badb265b62a85034f48e0eac76a1b}{e}}.index();} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00829}00829 \} \textcolor{keywordflow}{else} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00830}00830 \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a536badb265b62a85034f48e0eac76a1b}{e}}.copied();} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00831}00831 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00832}00832 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00833}00833 \textcolor{keyword}{template} } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00834}\mbox{\hyperlink{namespacekblib_a41c0ca0fe1a53fd119fc343cf9a4040e}{00834}} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a2888a4a5d49c15f73ced60c66c31dc15}{get}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1enumeration}{enumeration}}\&\& \mbox{\hyperlink{namespacekblib_a536badb265b62a85034f48e0eac76a1b}{e}}) -\/> \textcolor{keyword}{decltype}(\textcolor{keyword}{auto}) \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00835}00835 \textcolor{keyword}{static\_assert}(I <= 1, \textcolor{stringliteral}{"{}enumeration only has two elements"{}});} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00836}00836 \textcolor{keywordflow}{if} \textcolor{keyword}{constexpr} (I == 0) \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00837}00837 \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a536badb265b62a85034f48e0eac76a1b}{e}}.index();} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00838}00838 \} \textcolor{keywordflow}{else} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00839}00839 \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a536badb265b62a85034f48e0eac76a1b}{e}}.copied();} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00840}00840 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00841}00841 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00842}00842 \textcolor{comment}{// When captured by reference, the volatile qualifier is added, which allows}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00843}00843 \textcolor{comment}{// std::tuple\_element to detect the copying-\/nonconst-\/from-\/const case.}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00844}00844 \textcolor{keyword}{template} } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00845}\mbox{\hyperlink{namespacekblib_a052e6c7d0944cda0ce9203c1036fc745}{00845}} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a2888a4a5d49c15f73ced60c66c31dc15}{get}}(\textcolor{keyword}{volatile} \mbox{\hyperlink{classkblib_1_1enumeration}{enumeration}}\& \mbox{\hyperlink{namespacekblib_a536badb265b62a85034f48e0eac76a1b}{e}}) -\/> \textcolor{keyword}{decltype}(\textcolor{keyword}{auto}) \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00846}00846 \textcolor{keyword}{static\_assert}(I <= 1, \textcolor{stringliteral}{"{}enumeration only has two elements"{}});} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00847}00847 \textcolor{keywordflow}{if} \textcolor{keyword}{constexpr} (I == 0) \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00848}00848 \textcolor{keywordflow}{return} \textcolor{keyword}{const\_cast<}\mbox{\hyperlink{classkblib_1_1enumeration}{enumeration}}\&\textcolor{keyword}{>}(\mbox{\hyperlink{namespacekblib_a536badb265b62a85034f48e0eac76a1b}{e}}).index();} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00849}00849 \} \textcolor{keywordflow}{else} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00850}00850 \textcolor{keywordflow}{return} \textcolor{keyword}{const\_cast<}\mbox{\hyperlink{classkblib_1_1enumeration}{enumeration}}\&\textcolor{keyword}{>}(\mbox{\hyperlink{namespacekblib_a536badb265b62a85034f48e0eac76a1b}{e}}).reffed();} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00851}00851 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00852}00852 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00853}00853 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00854}00854 \textcolor{keyword}{template} } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00855}\mbox{\hyperlink{namespacekblib_a2888a4a5d49c15f73ced60c66c31dc15}{00855}} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a2888a4a5d49c15f73ced60c66c31dc15}{get}}(\textcolor{keyword}{const} \textcolor{keyword}{volatile} \mbox{\hyperlink{classkblib_1_1enumeration}{enumeration}}\& \mbox{\hyperlink{namespacekblib_a536badb265b62a85034f48e0eac76a1b}{e}}) -\/> \textcolor{keyword}{decltype}(\textcolor{keyword}{auto}) \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00856}00856 \textcolor{keyword}{static\_assert}(I <= 1, \textcolor{stringliteral}{"{}enumeration only has two elements"{}});} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00857}00857 \textcolor{keywordflow}{if} \textcolor{keyword}{constexpr} (I == 0) \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00858}00858 \textcolor{keywordflow}{return} \textcolor{keyword}{const\_cast<}\textcolor{keyword}{const }\mbox{\hyperlink{classkblib_1_1enumeration}{enumeration}}\&\textcolor{keyword}{>}(\mbox{\hyperlink{namespacekblib_a536badb265b62a85034f48e0eac76a1b}{e}}).index();} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00859}00859 \} \textcolor{keywordflow}{else} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00860}00860 \textcolor{keywordflow}{return} \textcolor{keyword}{const\_cast<}\textcolor{keyword}{const }\mbox{\hyperlink{classkblib_1_1enumeration}{enumeration}}\&\textcolor{keyword}{>}(\mbox{\hyperlink{namespacekblib_a536badb265b62a85034f48e0eac76a1b}{e}}).reffed();} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00861}00861 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00862}00862 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00863}00863 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00864}00864 \textcolor{keyword}{template} <\textcolor{keyword}{typename} It>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00865}\mbox{\hyperlink{classkblib_1_1enumerator__iterator}{00865}} \textcolor{keyword}{class }\mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00866}00866 \textcolor{keyword}{public}:} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00867}\mbox{\hyperlink{classkblib_1_1enumerator__iterator_acd38fab6f2a44f77de6a8b457aa25694}{00867}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1enumerator__iterator_acd38fab6f2a44f77de6a8b457aa25694}{nested\_value}}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00868}00868 = \mbox{\hyperlink{namespacekblib_af973fdd9c2dddf6db3744ae83902fc72}{copy\_const\_t}}()),} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00869}00869 \textcolor{keyword}{typename} std::iterator\_traits::value\_type>;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00870}00870 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00871}\mbox{\hyperlink{classkblib_1_1enumerator__iterator_a2bd5e36eb96817d637ed932603685bee}{00871}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1enumeration}{value\_type}} = \mbox{\hyperlink{classkblib_1_1enumeration}{enumeration}};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00872}\mbox{\hyperlink{classkblib_1_1enumerator__iterator_abf2873d17e083bb655b170abaffe8469}{00872}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1enumerator__iterator_abf2873d17e083bb655b170abaffe8469}{difference\_type}} = std::ptrdiff\_t;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00873}\mbox{\hyperlink{classkblib_1_1enumerator__iterator_aa9fc12692f7318303f6464d00f5ae992}{00873}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1enumeration}{pointer}} = \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1enumeration}{value\_type}}*;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00874}\mbox{\hyperlink{classkblib_1_1enumerator__iterator_a68663d2a17cf6dc73e593c85b96247f0}{00874}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1enumeration}{reference}} = \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1enumeration}{value\_type}}\&;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00875}\mbox{\hyperlink{classkblib_1_1enumerator__iterator_aa6ecf418cb165de9b9fcb2c1a96c1612}{00875}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1enumerator__iterator_aa6ecf418cb165de9b9fcb2c1a96c1612}{iterator\_category}} = std::input\_iterator\_tag;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00876}00876 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00877}\mbox{\hyperlink{classkblib_1_1enumerator__iterator_aa33d18d5c49292de99552bad27bddb1c}{00877}} \mbox{\hyperlink{classkblib_1_1enumerator__iterator_aa33d18d5c49292de99552bad27bddb1c}{enumerator\_iterator}}() = \textcolor{keywordflow}{default};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00878}\mbox{\hyperlink{classkblib_1_1enumerator__iterator_a360fcba390a888a2a065cf3e75db2de3}{00878}} \mbox{\hyperlink{classkblib_1_1enumerator__iterator_a360fcba390a888a2a065cf3e75db2de3}{enumerator\_iterator}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator}}\& other)} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00879}00879 : \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator}}(detail\_enumerate::force\_copy\_tag\{\},} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00880}00880 other.curr\_.idx, other.it\_) \{\}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00881}\mbox{\hyperlink{classkblib_1_1enumerator__iterator_abccb1d7b00a99eede5841200a81898a9}{00881}} \mbox{\hyperlink{classkblib_1_1enumerator__iterator_abccb1d7b00a99eede5841200a81898a9}{enumerator\_iterator}}(It it)} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00882}00882 : it\_(it) \{\}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00883}00883 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00884}\mbox{\hyperlink{classkblib_1_1enumerator__iterator_aea94758df9bbd1b411a400d7ec3bf24a}{00884}} \mbox{\hyperlink{classkblib_1_1enumerator__iterator_aea94758df9bbd1b411a400d7ec3bf24a}{enumerator\_iterator}}(\mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator}}\&\&) = \textcolor{keywordflow}{default};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00885}\mbox{\hyperlink{classkblib_1_1enumerator__iterator_aaa0ab3cdb061fd0c450f2ba9828557f9}{00885}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1enumerator__iterator_aaa0ab3cdb061fd0c450f2ba9828557f9}{operator=}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator}}\&) -\/> \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator}}\& = \textcolor{keywordflow}{default};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00886}\mbox{\hyperlink{classkblib_1_1enumerator__iterator_aa5920d030219e7fa79570ed5487640a2}{00886}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1enumerator__iterator_aa5920d030219e7fa79570ed5487640a2}{operator=}}(\mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator}}\&\&) -\/> \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator}}\& = \textcolor{keywordflow}{default};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00887}00887 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00888}\mbox{\hyperlink{classkblib_1_1enumerator__iterator_a43d6ff087a7d75c3c1319a83fd0eefc5}{00888}} \mbox{\hyperlink{classkblib_1_1enumerator__iterator_a43d6ff087a7d75c3c1319a83fd0eefc5}{\string~enumerator\_iterator}}() = \textcolor{keywordflow}{default};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00889}00889 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00890}\mbox{\hyperlink{classkblib_1_1enumerator__iterator_ad4f8f540f7c75a3a9fee5d19d41ce3a6}{00890}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1enumerator__iterator_ad4f8f540f7c75a3a9fee5d19d41ce3a6}{operator*}}() \& -\/> \textcolor{keyword}{volatile} \mbox{\hyperlink{classkblib_1_1enumeration}{value\_type}}\& \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00891}00891 \textcolor{keywordflow}{if} (not captured) \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00892}00892 curr\_.set(\mbox{\hyperlink{namespacekblib_a1c2aa67048789f77bea56734a583d3d1}{to\_pointer}}(it\_));} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00893}00893 captured = \textcolor{keyword}{true};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00894}00894 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00895}00895 \textcolor{keywordflow}{return} curr\_;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00896}00896 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00897}\mbox{\hyperlink{classkblib_1_1enumerator__iterator_a8e647fbb8c902d5c927db6f510e21ffb}{00897}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1enumerator__iterator_a8e647fbb8c902d5c927db6f510e21ffb}{operator++}}() \& -\/> \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator}}\& \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00898}00898 curr\_.advance();} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00899}00899 captured = \textcolor{keyword}{false};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00900}00900 ++it\_;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00901}00901 \textcolor{keywordflow}{return} *\textcolor{keyword}{this};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00902}00902 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00903}00903 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00904}\mbox{\hyperlink{classkblib_1_1enumerator__iterator_aa6204ed79dd94064ee0a380f5b61c624}{00904}} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1enumerator__iterator_aa6204ed79dd94064ee0a380f5b61c624}{operator==}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator}}\& lhs,} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00905}00905 \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator}}\& rhs) \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{bool} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00906}00906 \textcolor{keywordflow}{return} lhs.it\_ == rhs.it\_;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00907}00907 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00908}\mbox{\hyperlink{classkblib_1_1enumerator__iterator_af6555d8dd1cdd998e40c821ed352540d}{00908}} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1enumerator__iterator_af6555d8dd1cdd998e40c821ed352540d}{operator!=}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator}}\& lhs,} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00909}00909 \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator}}\& rhs) \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{bool} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00910}00910 \textcolor{keywordflow}{return} lhs.it\_ != rhs.it\_;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00911}00911 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00912}00912 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00913}00913 \textcolor{keyword}{private}:} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00914}00914 \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator}}(\mbox{\hyperlink{structkblib_1_1detail__enumerate_1_1force__copy__tag}{detail\_enumerate::force\_copy\_tag}} t, std::size\_t idx,} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00915}00915 It it)} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00916}00916 : it\_(it)} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00917}00917 , curr\_(t, idx) \{\}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00918}00918 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00919}00919 It it\_;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00920}00920 \textcolor{keywordtype}{bool} captured = \textcolor{keyword}{false};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00921}00921 value\_type curr\_;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00922}00922 \};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00923}00923 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00924}00924 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Range, \textcolor{keyword}{typename} = \textcolor{keywordtype}{void}>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00925}00925 \textcolor{keyword}{class }enumerator\_t;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00926}00926 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00927}00927 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Range>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00928}\mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4}{00928}} \textcolor{keyword}{class }\mbox{\hyperlink{classkblib_1_1enumerator__t}{enumerator\_t}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00929}00929 \textcolor{keyword}{public}:} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00930}\mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_ac043b63b7bb69e8c23b957061ca068b3}{00930}} \mbox{\hyperlink{namespacekblib_1_1detail_aca9cd901eb773c411961ea11739f3d40}{detail::no\_dangle\_t}} \mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_ac043b63b7bb69e8c23b957061ca068b3}{r}};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00931}00931 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00932}\mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_a84ce83b9ff25327bb0228cbf1da4b202}{00932}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_a84ce83b9ff25327bb0228cbf1da4b202}{range\_t}} = \textcolor{keyword}{typename} std::remove\_reference\_t;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00933}\mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_a85ff0f722ebf3fc42791b848a5b6d728}{00933}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_a85ff0f722ebf3fc42791b848a5b6d728}{nested\_iterator}} = \textcolor{keyword}{decltype}(r.begin());} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00934}\mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_ab798e42fa81b75e1b135ef81f9f37c18}{00934}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_ab798e42fa81b75e1b135ef81f9f37c18}{nested\_end\_iterator}} = \textcolor{keyword}{decltype}(r.end());} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00935}\mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_afdd32f18b0e63a77f0d6b0c8f8dcd8a0}{00935}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1enumerator__iterator}{iterator}} = \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator}};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00936}\mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_a22dcb153e02fefffbb7a0f7414270a70}{00936}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1enumerator__iterator}{end\_iterator}} = \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator}};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00937}00937 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00938}\mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_a59f42e61ef2b63f8f8d4a8f9aac64902}{00938}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_a59f42e61ef2b63f8f8d4a8f9aac64902}{nested\_const\_iterator}} = \textcolor{keyword}{typename} range\_t::const\_iterator;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00939}\mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_a0e04065874b30cd196097939749d3744}{00939}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1enumerator__iterator}{const\_iterator}} = \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator}};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00940}00940 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00941}\mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_a8b353bd881ed069337d2f28a7601c3f6}{00941}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_a8b353bd881ed069337d2f28a7601c3f6}{begin}}() const\& noexcept(noexcept(r.cbegin())) -\/> \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{const\_iterator}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00942}00942 \textcolor{keywordflow}{return} r.cbegin();} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00943}00943 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00944}\mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_ab785629cea88041ca75c506d8f5d58d5}{00944}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_ab785629cea88041ca75c506d8f5d58d5}{begin}}() \& \textcolor{keyword}{noexcept}(\textcolor{keyword}{noexcept}(r.begin())) -\/> \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{iterator}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00945}00945 \textcolor{keywordflow}{return} r.begin();} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00946}00946 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00947}00947 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00948}\mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_ac248220cdfd601047f1bba39821842a7}{00948}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_ac248220cdfd601047f1bba39821842a7}{end}}() const\& noexcept(noexcept(r.cend())) -\/> \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{const\_iterator}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00949}00949 \textcolor{keywordflow}{return} r.cend();} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00950}00950 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00951}\mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_a77b5228358bcd320f2b41796282c00a9}{00951}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_a77b5228358bcd320f2b41796282c00a9}{end}}() \& \textcolor{keyword}{noexcept}(\textcolor{keyword}{noexcept}(r.end())) -\/> \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{end\_iterator}} \{ \textcolor{keywordflow}{return} r.end(); \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00952}00952 \};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00953}00953 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00954}00954 \textcolor{keyword}{template} <\textcolor{keyword}{typename} It, \textcolor{keyword}{typename} EndIt>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00955}\mbox{\hyperlink{classkblib_1_1enumerator__t}{00955}} \textcolor{keyword}{class }\mbox{\hyperlink{classkblib_1_1enumerator__t}{enumerator\_t}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00956}00956 \textcolor{keyword}{public}:} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00957}\mbox{\hyperlink{classkblib_1_1enumerator__t_a31e0c986f1697afb004a0de7b620497a}{00957}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1enumerator__t_a31e0c986f1697afb004a0de7b620497a}{nested\_iterator}} = It;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00958}\mbox{\hyperlink{classkblib_1_1enumerator__t_a9b05bb760ad518ca9099ed76bdb4bf4e}{00958}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1enumerator__iterator}{iterator}} = \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator}};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00959}\mbox{\hyperlink{classkblib_1_1enumerator__t_ad3b952bf530ac7cf0152d8a56a4b62f5}{00959}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1enumerator__iterator}{end\_iterator}} = \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator}};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00960}00960 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00961}\mbox{\hyperlink{classkblib_1_1enumerator__t_ab397ba671c5da3ab4de9fdbe6d4ba562}{00961}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1enumerator__t_ab397ba671c5da3ab4de9fdbe6d4ba562}{begin}}() const\& noexcept -\/> \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{iterator}} \{ \textcolor{keywordflow}{return} \{r\_begin\}; \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00962}00962 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00963}\mbox{\hyperlink{classkblib_1_1enumerator__t_a5a7c13560eab4adc7853f14171067b00}{00963}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1enumerator__t_a5a7c13560eab4adc7853f14171067b00}{end}}() const\& noexcept -\/> \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{end\_iterator}} \{ \textcolor{keywordflow}{return} \{r\_end\}; \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00964}00964 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00965}\mbox{\hyperlink{classkblib_1_1enumerator__t_a26e9d9e3ea73e6c39e95a6f145f92f73}{00965}} It \mbox{\hyperlink{classkblib_1_1enumerator__t_a26e9d9e3ea73e6c39e95a6f145f92f73}{r\_begin}};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00966}\mbox{\hyperlink{classkblib_1_1enumerator__t_a308284aaaa3a26159df5145c86675c24}{00966}} EndIt \mbox{\hyperlink{classkblib_1_1enumerator__t_a308284aaaa3a26159df5145c86675c24}{r\_end}};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00967}00967 \};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00968}00968 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00988}00988 \textcolor{keyword}{template} <\textcolor{keyword}{typename} It, \textcolor{keyword}{typename} EIt>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00989}\mbox{\hyperlink{namespacekblib_a0084bbd67ea381c6954c3d82c3cd0691}{00989}} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a5617b65c2a82a734f2095c16f00e316c}{magic\_enumerate}}(It begin, EIt end) -\/> \mbox{\hyperlink{classkblib_1_1enumerator__t}{enumerator\_t}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00990}00990 \textcolor{keywordflow}{return} \{begin, end\};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00991}00991 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l00992}00992 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01013}01013 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Range>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01014}\mbox{\hyperlink{namespacekblib_a5617b65c2a82a734f2095c16f00e316c}{01014}} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a5617b65c2a82a734f2095c16f00e316c}{magic\_enumerate}}(Range\&\& r) -\/> \textcolor{keyword}{auto} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01015}01015 \textcolor{keywordflow}{if} \textcolor{keyword}{constexpr} (std::is\_lvalue\_reference\_v) \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01016}01016 \textcolor{keyword}{using }std::begin;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01017}01017 \textcolor{keyword}{using }std::end;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01018}01018 \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a5617b65c2a82a734f2095c16f00e316c}{magic\_enumerate}}(begin(r), end(r));} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01019}01019 \} \textcolor{keywordflow}{else} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01020}01020 \textcolor{keywordflow}{return} \mbox{\hyperlink{classkblib_1_1enumerator__t}{enumerator\_t}}\{std::forward(r)\};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01021}01021 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01022}01022 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01023}01023 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01024}01024 \textcolor{preprocessor}{\#endif}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01025}01025 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01029}01029 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Iter1, \textcolor{keyword}{typename} Iter2>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01030}\mbox{\hyperlink{structkblib_1_1indirect__range}{01030}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1indirect__range}{indirect\_range}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01031}\mbox{\hyperlink{structkblib_1_1indirect__range_ae8a6b6587d1bee513210907f3711c2ed}{01031}} Iter1 \mbox{\hyperlink{structkblib_1_1indirect__range_ae8a6b6587d1bee513210907f3711c2ed}{begin\_}};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01032}\mbox{\hyperlink{structkblib_1_1indirect__range_a48c8a5f1dfb8cfe5f93419bad0a8bd2c}{01032}} Iter2 \mbox{\hyperlink{structkblib_1_1indirect__range_a48c8a5f1dfb8cfe5f93419bad0a8bd2c}{end\_}};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01033}01033 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01034}\mbox{\hyperlink{structkblib_1_1indirect__range_a26edfee8ca72bfd7ffe206b6ebaf1470}{01034}} \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1indirect__range_a26edfee8ca72bfd7ffe206b6ebaf1470}{value\_type}} = \textcolor{keyword}{decltype}(*begin\_);} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01035}01035 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01036}\mbox{\hyperlink{structkblib_1_1indirect__range_a6318194ec2d7ce22bda135ebc5148ccf}{01036}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1indirect__range_a6318194ec2d7ce22bda135ebc5148ccf}{begin}}() const noexcept -\/> Iter1 \{ \textcolor{keywordflow}{return} begin\_; \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01037}\mbox{\hyperlink{structkblib_1_1indirect__range_ac40e4c1e0297d4784d6c939932386fb5}{01037}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1indirect__range_ac40e4c1e0297d4784d6c939932386fb5}{end}}() const noexcept -\/> Iter2 \{ \textcolor{keywordflow}{return} end\_; \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01038}\mbox{\hyperlink{structkblib_1_1indirect__range_aeb42ed53296b44c639eafe6bf6e5d8f2}{01038}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1indirect__range_aeb42ed53296b44c639eafe6bf6e5d8f2}{rbegin}}() const noexcept -\/> auto \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01039}01039 \textcolor{keywordflow}{return} std::make\_reverse\_iterator(begin\_);} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01040}01040 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01041}\mbox{\hyperlink{structkblib_1_1indirect__range_a0b93a671559bc813f930df8acf39654d}{01041}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1indirect__range_a0b93a671559bc813f930df8acf39654d}{rend}}() const noexcept -\/> auto \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01042}01042 \textcolor{keywordflow}{return} std::make\_reverse\_iterator(end\_);} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01043}01043 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01044}01044 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01045}\mbox{\hyperlink{structkblib_1_1indirect__range_a0b9dfb07c7b3c219e120e02ca542fa08}{01045}} \textcolor{keyword}{constexpr} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1indirect__range_a0b9dfb07c7b3c219e120e02ca542fa08}{begin}}(\textcolor{keyword}{const} \mbox{\hyperlink{structkblib_1_1indirect__range}{indirect\_range}}\& r) \textcolor{keyword}{noexcept} -\/> Iter1 \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01046}01046 \textcolor{keywordflow}{return} r.begin\_;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01047}01047 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01048}\mbox{\hyperlink{structkblib_1_1indirect__range_a36b0e0282de329a9e368aaf422a0dd0b}{01048}} \textcolor{keyword}{constexpr} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1indirect__range_a36b0e0282de329a9e368aaf422a0dd0b}{end}}(\textcolor{keyword}{const} \mbox{\hyperlink{structkblib_1_1indirect__range}{indirect\_range}}\& r) \textcolor{keyword}{noexcept} -\/> Iter2 \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01049}01049 \textcolor{keywordflow}{return} r.end\_;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01050}01050 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01051}01051 \};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01052}01052 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01059}01059 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Iter1, \textcolor{keyword}{typename} Iter2>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01060}\mbox{\hyperlink{namespacekblib_a893a2961c20b0657dffbbd2fe8f362c4}{01060}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a893a2961c20b0657dffbbd2fe8f362c4}{indirect}}(Iter1 begin, Iter2 end) \textcolor{keyword}{noexcept}(\textcolor{keyword}{noexcept}(} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01061}01061 \mbox{\hyperlink{structkblib_1_1indirect__range}{indirect\_range}}\{begin, end\})) -\/> indirect\_range \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01062}01062 \textcolor{keywordflow}{return} \{begin, end\};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01063}01063 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01064}01064 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01065}01065 \textcolor{preprocessor}{\#if KBLIB\_USE\_CXX17}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01066}01066 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01067}01067 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Iter1, \textcolor{keyword}{typename} Iter2>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01068}\mbox{\hyperlink{namespacekblib_adbf35ad5c1ebb477db462d817a1a03cc}{01068}} \mbox{\hyperlink{namespacekblib_adbf35ad5c1ebb477db462d817a1a03cc}{indirect\_range}}(Iter1, Iter2) -\/> \mbox{\hyperlink{structkblib_1_1indirect__range}{indirect\_range}};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01069}01069 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01070}01070 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Iter1, \textcolor{keyword}{typename} Iter2>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01071}\mbox{\hyperlink{namespacekblib_a77828de35fa34ad16a59080a4cf5ca91}{01071}} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a77828de35fa34ad16a59080a4cf5ca91}{cry\_enumerate}}(Iter1 begin, Iter2 end) -\/> \textcolor{keyword}{auto} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01072}01072 \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a77828de35fa34ad16a59080a4cf5ca91}{cry\_enumerate}}(\mbox{\hyperlink{structkblib_1_1indirect__range}{indirect\_range}}\{begin, end\});} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01073}01073 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01074}01074 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01075}01075 \textcolor{preprocessor}{\#endif}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01076}01076 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01077}01077 \textcolor{comment}{// Fixed number of ranges}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01078}01078 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Iter1, \textcolor{keyword}{typename} EndIter = Iter1, std::\textcolor{keywordtype}{size\_t} count = 0>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01079}\mbox{\hyperlink{classkblib_1_1multi__range}{01079}} \textcolor{keyword}{class }\mbox{\hyperlink{classkblib_1_1multi__range}{multi\_range}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01080}01080 \textcolor{keyword}{public}:} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01081}01081 \textcolor{keyword}{private}:} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01082}01082 \textcolor{keyword}{struct }\mbox{\hyperlink{namespacekblib_ac136a707b14a83235d82c267830f0cd9}{range}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01083}01083 Iter1 begin;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01084}01084 EndIter end;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01085}01085 \};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01086}01086 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01087}01087 std::array ranges;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01088}01088 \};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01089}01089 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01090}01090 \textcolor{comment}{// Dynamic number of ranges}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01091}01091 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Iter1, \textcolor{keyword}{typename} EndIter>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01092}\mbox{\hyperlink{classkblib_1_1multi__range_3_01_iter1_00_01_end_iter_00_010_01_4}{01092}} \textcolor{keyword}{class }\mbox{\hyperlink{classkblib_1_1multi__range}{multi\_range}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01093}01093 \textcolor{keyword}{public}:} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01094}01094 \textcolor{keyword}{private}:} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01095}01095 \textcolor{keyword}{struct }\mbox{\hyperlink{namespacekblib_ac136a707b14a83235d82c267830f0cd9}{range}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01096}01096 Iter1 begin;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01097}01097 EndIter end;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01098}01098 \};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01099}01099 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01100}01100 std::vector ranges;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01101}01101 \};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01102}01102 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01108}01108 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01109}\mbox{\hyperlink{structkblib_1_1containing__ptr}{01109}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1containing__ptr}{containing\_ptr}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01113}\mbox{\hyperlink{structkblib_1_1containing__ptr_a9c802e07f9bfd6aa800d3d5ea93ee9d2}{01113}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1containing__ptr_a9c802e07f9bfd6aa800d3d5ea93ee9d2}{operator*}}() noexcept -\/> T\& \{ \textcolor{keywordflow}{return} val; \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01117}\mbox{\hyperlink{structkblib_1_1containing__ptr_a1dbf05b259fbb8ef56d5d6cb49113cb6}{01117}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1containing__ptr_a1dbf05b259fbb8ef56d5d6cb49113cb6}{operator*}}() const noexcept -\/> const T\& \{ \textcolor{keywordflow}{return} val; \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01118}01118 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01122}\mbox{\hyperlink{structkblib_1_1containing__ptr_a3ffb1edc8e74d5851737084f8c66b4c2}{01122}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1containing__ptr_a3ffb1edc8e74d5851737084f8c66b4c2}{operator-\/>}}() noexcept -\/> T* \{ \textcolor{keywordflow}{return} \&val; \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01126}\mbox{\hyperlink{structkblib_1_1containing__ptr_a2967e02c6d1c866b352d7aefe8b4e155}{01126}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1containing__ptr_a2967e02c6d1c866b352d7aefe8b4e155}{operator-\/>}}() const noexcept -\/> const T* \{ \textcolor{keywordflow}{return} \&val; \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01127}01127 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01131}\mbox{\hyperlink{structkblib_1_1containing__ptr_a72987dd4167ed55d78343191727cbd14}{01131}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1containing__ptr_a72987dd4167ed55d78343191727cbd14}{get}}() noexcept -\/> T* \{ \textcolor{keywordflow}{return} \&val; \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01135}\mbox{\hyperlink{structkblib_1_1containing__ptr_ae2888c7e01d0371e350ddb648514c952}{01135}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1containing__ptr_ae2888c7e01d0371e350ddb648514c952}{get}}() const noexcept -\/> const T* \{ \textcolor{keywordflow}{return} \&val; \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01136}01136 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01137}\mbox{\hyperlink{structkblib_1_1containing__ptr_a19103620d6c9af67bda7154104101ca5}{01137}} T \mbox{\hyperlink{structkblib_1_1containing__ptr_a19103620d6c9af67bda7154104101ca5}{val}};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01138}01138 \};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01139}01139 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01140}01140 \textcolor{preprocessor}{\#if KBLIB\_USE\_CXX17}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01141}01141 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01148}01148 \textcolor{keyword}{template} <\textcolor{keyword}{typename} base\_iterator, \textcolor{keyword}{typename} operation>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01149}\mbox{\hyperlink{classkblib_1_1transform__iterator}{01149}} \textcolor{keyword}{class }\mbox{\hyperlink{classkblib_1_1transform__iterator}{transform\_iterator}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01150}01150 \textcolor{keyword}{private}:} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01151}01151 base\_iterator it;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01152}01152 operation op;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01153}01153 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01154}01154 \textcolor{keyword}{public}:} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01155}\mbox{\hyperlink{classkblib_1_1transform__iterator_a02228d419dd69c02f2eb12611195a8d7}{01155}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1transform__iterator_a02228d419dd69c02f2eb12611195a8d7}{difference\_type}} = std::ptrdiff\_t;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01156}\mbox{\hyperlink{classkblib_1_1transform__iterator_a94aef5aac6c2f83307ba6d371e136ca4}{01156}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1transform__iterator_a94aef5aac6c2f83307ba6d371e136ca4}{result\_type}} = \textcolor{keyword}{decltype}(\mbox{\hyperlink{namespacekblib_a9b10acd2ddaea118b990e1177f626722}{kblib::invoke}}(op, *it));} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01157}\mbox{\hyperlink{classkblib_1_1transform__iterator_a1886772f5691cb6a1449988eb4fe2440}{01157}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1transform__iterator_a1886772f5691cb6a1449988eb4fe2440}{const\_result\_type}}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01158}01158 = \textcolor{keyword}{decltype}(\mbox{\hyperlink{namespacekblib_a9b10acd2ddaea118b990e1177f626722}{kblib::invoke}}(std::as\_const(op), *std::as\_const(it)));} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01159}\mbox{\hyperlink{classkblib_1_1transform__iterator_a5e428c32970f41f62b42d1d338493ffd}{01159}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1transform__iterator_a5e428c32970f41f62b42d1d338493ffd}{value\_type}} = \mbox{\hyperlink{classkblib_1_1transform__iterator_a94aef5aac6c2f83307ba6d371e136ca4}{result\_type}};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01160}\mbox{\hyperlink{classkblib_1_1transform__iterator_a2fe3030bcc46de77b00e11a13c234f1c}{01160}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1transform__iterator_a2fe3030bcc46de77b00e11a13c234f1c}{pointer}} = void;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01161}\mbox{\hyperlink{classkblib_1_1transform__iterator_a8a5db0bd5c6f80af9ca7b927ccc9bfaf}{01161}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1transform__iterator_a8a5db0bd5c6f80af9ca7b927ccc9bfaf}{reference}} = \mbox{\hyperlink{classkblib_1_1transform__iterator_a5e428c32970f41f62b42d1d338493ffd}{value\_type}};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01162}\mbox{\hyperlink{classkblib_1_1transform__iterator_a97579a49d25c108b6aa89fb5bc94feb9}{01162}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1transform__iterator_a97579a49d25c108b6aa89fb5bc94feb9}{iterator\_category}} = std::input\_iterator\_tag;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01163}01163 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01171}\mbox{\hyperlink{classkblib_1_1transform__iterator_a30ebb040770818ba0804743095752f8b}{01171}} \mbox{\hyperlink{classkblib_1_1transform__iterator_a30ebb040770818ba0804743095752f8b}{transform\_iterator}}(base\_iterator \_it,} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01172}01172 operation \_op) \textcolor{keyword}{noexcept}(\textcolor{keyword}{noexcept}(base\_iterator\{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01173}01173 \_it\}) and \textcolor{keyword}{noexcept}(std::is\_nothrow\_move\_constructible::value))} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01174}01174 : it(\_it)} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01175}01175 , op(std::move(\_op)) \{\}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01176}01176 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01182}\mbox{\hyperlink{classkblib_1_1transform__iterator_a45dbc8c657167842c46e8ff35f87e352}{01182}} \mbox{\hyperlink{classkblib_1_1transform__iterator_a45dbc8c657167842c46e8ff35f87e352}{transform\_iterator}}(base\_iterator end\_it) \textcolor{keyword}{noexcept}(\textcolor{keyword}{noexcept}(base\_iterator\{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01183}01183 end\_it\}))} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01184}01184 : it(end\_it)} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01185}01185 , op() \{\}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01186}01186 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01192}\mbox{\hyperlink{classkblib_1_1transform__iterator_aa4b0789bf772c4526658710be3666afa}{01192}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1transform__iterator_aa4b0789bf772c4526658710be3666afa}{operator*}}() noexcept(noexcept(\mbox{\hyperlink{namespacekblib}{kblib}}::\mbox{\hyperlink{namespacekblib_a9b10acd2ddaea118b990e1177f626722}{invoke}}(op, *it)))} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01193}01193 -\/> decltype(auto) \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01194}01194 \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a9b10acd2ddaea118b990e1177f626722}{kblib::invoke}}(op, *it);} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01195}01195 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01201}\mbox{\hyperlink{classkblib_1_1transform__iterator_aedbf67783a2c296666ba9ff5a462e790}{01201}} \textcolor{keyword}{decltype}(\textcolor{keyword}{auto}) \textcolor{keyword}{operator}*() \textcolor{keyword}{const} \textcolor{keyword}{noexcept}(\textcolor{keyword}{noexcept}(\mbox{\hyperlink{namespacekblib_a9b10acd2ddaea118b990e1177f626722}{kblib::invoke}}(op, *it))) \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01202}01202 \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a9b10acd2ddaea118b990e1177f626722}{kblib::invoke}}(op, *it);} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01203}01203 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01204}01204 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01209}\mbox{\hyperlink{classkblib_1_1transform__iterator_a5fb6e004e063d548d6ace4344fc0be48}{01209}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1transform__iterator_a5fb6e004e063d548d6ace4344fc0be48}{operator-\/>}}() noexcept(noexcept(\mbox{\hyperlink{namespacekblib}{kblib}}::\mbox{\hyperlink{namespacekblib_a9b10acd2ddaea118b990e1177f626722}{invoke}}(op, *it))) -\/> auto \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01210}01210 \textcolor{keywordflow}{return} \mbox{\hyperlink{structkblib_1_1containing__ptr}{containing\_ptr}}\{\{\mbox{\hyperlink{namespacekblib_a9b10acd2ddaea118b990e1177f626722}{kblib::invoke}}(op, *it)\}\};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01211}01211 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01216}\mbox{\hyperlink{classkblib_1_1transform__iterator_a2878d8b39d632bfa5e5c244f2f167b0e}{01216}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1transform__iterator_a2878d8b39d632bfa5e5c244f2f167b0e}{operator-\/>}}() const noexcept(noexcept(\mbox{\hyperlink{namespacekblib}{kblib}}::\mbox{\hyperlink{namespacekblib_a9b10acd2ddaea118b990e1177f626722}{invoke}}(op, *it))) -\/> auto \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01217}01217 \textcolor{keywordflow}{return} \mbox{\hyperlink{structkblib_1_1containing__ptr}{containing\_ptr}}\{\{\mbox{\hyperlink{namespacekblib_a9b10acd2ddaea118b990e1177f626722}{kblib::invoke}}(op, *it)\}\};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01218}01218 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01219}01219 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01223}\mbox{\hyperlink{classkblib_1_1transform__iterator_a5d17232ee68f4500d8c4a077be9009cc}{01223}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1transform__iterator_a5d17232ee68f4500d8c4a077be9009cc}{operator++}}() noexcept(noexcept(++it)) -\/> \mbox{\hyperlink{classkblib_1_1transform__iterator}{transform\_iterator}}\& \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01224}01224 ++it;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01225}01225 \textcolor{keywordflow}{return} *\textcolor{keyword}{this};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01226}01226 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01227}01227 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01232}01232 [[deprecated(\textcolor{stringliteral}{"{}Needlessly copies op. Use preincrement instead."{}})]] \textcolor{keyword}{auto}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01233}\mbox{\hyperlink{classkblib_1_1transform__iterator_a827e50f3c280ca12d86848a63b0e254f}{01233}} \mbox{\hyperlink{classkblib_1_1transform__iterator_a827e50f3c280ca12d86848a63b0e254f}{operator++}}(\textcolor{keywordtype}{int}) \textcolor{keyword}{noexcept}(\textcolor{keyword}{noexcept}(\mbox{\hyperlink{classkblib_1_1transform__iterator}{transform\_iterator}}\{it++, op\}))} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01234}01234 -\/> \mbox{\hyperlink{classkblib_1_1transform__iterator}{transform\_iterator}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01235}01235 \textcolor{keywordflow}{return} \{it++, op\};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01236}01236 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01237}01237 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01238}\mbox{\hyperlink{classkblib_1_1transform__iterator_ab879b0ced417c902a30234f5189c049d}{01238}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1transform__iterator_ab879b0ced417c902a30234f5189c049d}{base}}() const noexcept -\/> base\_iterator \{ \textcolor{keywordflow}{return} it; \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01239}01239 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01240}\mbox{\hyperlink{classkblib_1_1transform__iterator_aead1794163653f6c6829691ce24c95f7}{01240}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1transform__iterator_aead1794163653f6c6829691ce24c95f7}{from\_base}}(base\_iterator it\_) \textcolor{keyword}{const}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01241}01241 \textcolor{keyword}{noexcept}(std::is\_nothrow\_copy\_constructible\_v)} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01242}01242 -\/> \mbox{\hyperlink{classkblib_1_1transform__iterator}{transform\_iterator}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01243}01243 \textcolor{keywordflow}{return} \{it\_, op\};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01244}01244 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01245}01245 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01249}\mbox{\hyperlink{classkblib_1_1transform__iterator_ab6112b052d003ddb11f94db0266a5079}{01249}} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1transform__iterator_ab6112b052d003ddb11f94db0266a5079}{operator==}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1transform__iterator}{transform\_iterator}}\& lhs,} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01250}01250 \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1transform__iterator}{transform\_iterator}}\& rhs) \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{bool} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01251}01251 \textcolor{keywordflow}{return} lhs.it == rhs.it;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01252}01252 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01253}01253 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01257}\mbox{\hyperlink{classkblib_1_1transform__iterator_ac9b8655a7bb927ea6794904a53ef66ea}{01257}} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1transform__iterator_ac9b8655a7bb927ea6794904a53ef66ea}{operator!=}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1transform__iterator}{transform\_iterator}}\& lhs,} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01258}01258 \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1transform__iterator}{transform\_iterator}}\& rhs) \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{bool} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01259}01259 \textcolor{keywordflow}{return} lhs.it != rhs.it;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01260}01260 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01261}01261 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01262}01262 \textcolor{keyword}{template} <\textcolor{keyword}{typename} OIt>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01263}\mbox{\hyperlink{classkblib_1_1transform__iterator_a5705317b59e361281ac258499ec38f0d}{01263}} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1transform__iterator_a5705317b59e361281ac258499ec38f0d}{operator==}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1transform__iterator}{transform\_iterator}}\& lhs,} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01264}01264 \textcolor{keyword}{const} OIt\& rhs) \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{bool} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01265}01265 \textcolor{keywordflow}{return} lhs.base() == rhs;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01266}01266 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01267}01267 \textcolor{keyword}{template} <\textcolor{keyword}{typename} OIt>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01268}\mbox{\hyperlink{classkblib_1_1transform__iterator_a4299bf3acacce3a8864129e2392e6d0d}{01268}} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1transform__iterator_a4299bf3acacce3a8864129e2392e6d0d}{operator==}}(\textcolor{keyword}{const} OIt\& lhs,} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01269}01269 \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1transform__iterator}{transform\_iterator}}\& rhs) \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{bool} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01270}01270 \textcolor{keywordflow}{return} lhs == rhs.base();} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01271}01271 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01272}01272 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01273}01273 \textcolor{keyword}{template} <\textcolor{keyword}{typename} OIt>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01274}\mbox{\hyperlink{classkblib_1_1transform__iterator_abb5773835b73e3dbf64bbfd0adf66f94}{01274}} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1transform__iterator_abb5773835b73e3dbf64bbfd0adf66f94}{operator!=}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1transform__iterator}{transform\_iterator}}\& lhs,} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01275}01275 \textcolor{keyword}{const} OIt\& rhs) \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{bool} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01276}01276 \textcolor{keywordflow}{return} lhs.base() != rhs;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01277}01277 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01278}01278 \textcolor{keyword}{template} <\textcolor{keyword}{typename} OIt>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01279}\mbox{\hyperlink{classkblib_1_1transform__iterator_a6a1a61b3e24431fa1d786477af665035}{01279}} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1transform__iterator_a6a1a61b3e24431fa1d786477af665035}{operator!=}}(\textcolor{keyword}{const} OIt\& lhs,} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01280}01280 \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1transform__iterator}{transform\_iterator}}\& rhs) \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{bool} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01281}01281 \textcolor{keywordflow}{return} lhs != rhs.base();} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01282}01282 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01283}01283 \};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01284}01284 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01285}01285 \textcolor{keyword}{template} <\textcolor{keyword}{typename} It, \textcolor{keyword}{typename} operation>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01286}\mbox{\hyperlink{namespacekblib_aa807d817e32edd6ed91e4f151dde9ae2}{01286}} \mbox{\hyperlink{namespacekblib_aa807d817e32edd6ed91e4f151dde9ae2}{transform\_iterator}}(It, operation) -\/> \mbox{\hyperlink{classkblib_1_1transform__iterator}{transform\_iterator}};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01287}01287 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01297}01297 \textcolor{keyword}{template} <\textcolor{keyword}{typename} base\_iterator, \textcolor{keyword}{typename} operation>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01298}\mbox{\hyperlink{namespacekblib_aed7bb6b5bb036248bdf3f0832e8404a8}{01298}} [[deprecated(\textcolor{stringliteral}{"{}use transformer instead"{}})]] \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_aed7bb6b5bb036248bdf3f0832e8404a8}{make\_transform\_iterator}}(} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01299}01299 base\_iterator it,} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01300}01300 operation} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01301}01301 op) \textcolor{keyword}{noexcept}(\textcolor{keyword}{noexcept}(\mbox{\hyperlink{classkblib_1_1transform__iterator}{transform\_iterator}}\{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01302}01302 it, std::move(op)\})) -\/> transform\_iterator \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01303}01303 \textcolor{keywordflow}{return} \{it, std::move(op)\};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01304}01304 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01305}01305 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01313}01313 \textcolor{keyword}{template} <\textcolor{keyword}{typename} base\_iterator, \textcolor{keyword}{typename} operation>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01314}\mbox{\hyperlink{namespacekblib_a05e897a858310bc166f65965eadf8f66}{01314}} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a05e897a858310bc166f65965eadf8f66}{transformer}}(base\_iterator it, operation op) \textcolor{keyword}{noexcept}(} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01315}01315 \textcolor{keyword}{noexcept}(\mbox{\hyperlink{classkblib_1_1transform__iterator}{transform\_iterator}}\{it, std::move(op)\}))} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01316}01316 -\/> transform\_iterator \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01317}01317 \textcolor{keywordflow}{return} \{it, std::move(op)\};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01318}01318 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01319}01319 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01320}01320 \textcolor{keyword}{template} <\textcolor{keyword}{typename} It, \textcolor{keyword}{typename} EndIt, \textcolor{keyword}{typename} operation>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01321}\mbox{\hyperlink{namespacekblib_a0f9b71b4a51492465cca27cdd0deeef6}{01321}} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a0f9b71b4a51492465cca27cdd0deeef6}{transform\_range}}(It begin, EndIt end, operation op) \textcolor{keyword}{noexcept}(} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01322}01322 \textcolor{keyword}{noexcept}(\mbox{\hyperlink{namespacekblib_a893a2961c20b0657dffbbd2fe8f362c4}{indirect}}(\mbox{\hyperlink{classkblib_1_1transform__iterator}{transform\_iterator}}\{begin, op\}, end))) -\/> \textcolor{keyword}{auto} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01323}01323 \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a893a2961c20b0657dffbbd2fe8f362c4}{indirect}}(\mbox{\hyperlink{namespacekblib_aa807d817e32edd6ed91e4f151dde9ae2}{transform\_iterator}}\{begin, op\}, end);} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01324}01324 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01325}01325 \textcolor{preprocessor}{\#endif}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01326}01326 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01327}01327 \textcolor{keyword}{template} <\textcolor{keyword}{typename} InputIt1, \textcolor{keyword}{typename} EndIt, \textcolor{keyword}{typename} InputIt2>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01328}\mbox{\hyperlink{structkblib_1_1zip__iterator}{01328}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01329}\mbox{\hyperlink{structkblib_1_1zip__iterator_a7e1a4763e48c00715fa2637fe9ad9c3d}{01329}} InputIt1 pos1\{\};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01330}\mbox{\hyperlink{structkblib_1_1zip__iterator_ad270eadc5377bee1c169568b6bd980d1}{01330}} EndIt end1\{\};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01331}\mbox{\hyperlink{structkblib_1_1zip__iterator_ac5912dd062c5825dd8ce774f5365eb86}{01331}} InputIt2 pos2\{\};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01332}01332 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01333}\mbox{\hyperlink{structkblib_1_1zip__iterator_a9ac62df038b82db20f0c8097772cf1ba}{01333}} \textcolor{keyword}{constexpr} \textcolor{keyword}{static} \textcolor{keywordtype}{bool} is\_nothrow\_copyable} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01334}01334 = std::is\_nothrow\_copy\_constructible::value} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01335}01335 and std::is\_nothrow\_copy\_constructible::value} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01336}01336 and std::is\_nothrow\_copy\_constructible::value;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01337}01337 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01338}\mbox{\hyperlink{structkblib_1_1zip__iterator_a46aed170d7d8f944fe23ca2f90aaa604}{01338}} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1zip__iterator_a46aed170d7d8f944fe23ca2f90aaa604}{operator++}}() noexcept(noexcept(++pos1) and noexcept(++pos2))} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01339}01339 -\/> \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}}\& \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01340}01340 ++pos1;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01341}01341 ++pos2;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01342}01342 \textcolor{keywordflow}{return} *\textcolor{keyword}{this};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01343}01343 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01344}\mbox{\hyperlink{structkblib_1_1zip__iterator_ade391e025aec9b67a7af40bc373250c3}{01344}} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1zip__iterator_ade391e025aec9b67a7af40bc373250c3}{operator++}}(\textcolor{keywordtype}{int}) \textcolor{keyword}{noexcept}(is\_nothrow\_copyable and \textcolor{keyword}{noexcept}(} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01345}01345 ++pos1) and \textcolor{keyword}{noexcept}(++pos2)) -\/> \textcolor{keyword}{const} \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01346}01346 \textcolor{keyword}{auto} tmp = *\textcolor{keyword}{this};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01347}01347 ++pos1;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01348}01348 ++pos2;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01349}01349 \textcolor{keywordflow}{return} tmp;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01350}01350 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01351}01351 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01352}\mbox{\hyperlink{structkblib_1_1zip__iterator_acb913d1dca80a6ed2a36b1d7fb4ed415}{01352}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1zip__iterator_acb913d1dca80a6ed2a36b1d7fb4ed415}{operator*}}() const noexcept -\/> auto \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01353}01353 \textcolor{keywordflow}{return} std::forward\_as\_tuple(*pos1, *pos2);} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01354}01354 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01355}01355 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01356}\mbox{\hyperlink{structkblib_1_1zip__iterator_abfe898fc154789f3c555b7d3d5e13157}{01356}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1zip__iterator_abfe898fc154789f3c555b7d3d5e13157}{begin}}() const noexcept(is\_nothrow\_copyable)} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01357}01357 -\/> \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01358}01358 \textcolor{keywordflow}{return} *\textcolor{keyword}{this};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01359}01359 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01360}\mbox{\hyperlink{structkblib_1_1zip__iterator_aa5c8f1248f51b5ebd63f5335d4ce9fe9}{01360}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1zip__iterator_aa5c8f1248f51b5ebd63f5335d4ce9fe9}{end}}() const} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01361}01361 noexcept(\mbox{\hyperlink{namespacestd}{std}}::is\_nothrow\_copy\_constructible::value and} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01362}01362 \mbox{\hyperlink{namespacestd}{std}}::is\_nothrow\_copy\_constructible::value)} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01363}01363 -\/> \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01364}01364 \textcolor{keywordflow}{return} \{end1, end1\};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01365}01365 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01366}01366 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01367}\mbox{\hyperlink{structkblib_1_1zip__iterator_a5a582ce768af27541ce63a2f8dbc5606}{01367}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1zip__iterator_a5a582ce768af27541ce63a2f8dbc5606}{operator==}}(} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01368}01368 \textcolor{keyword}{const} \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}}\& z1,} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01369}01369 \textcolor{keyword}{const} \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}}\& z2) \textcolor{keyword}{noexcept}(\textcolor{keyword}{noexcept}(z1.pos1 == z2.pos1)) -\/> \textcolor{keywordtype}{bool} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01370}01370 \textcolor{keywordflow}{return} z1.pos1 == z2.pos1;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01371}01371 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01372}\mbox{\hyperlink{structkblib_1_1zip__iterator_a97a3497ce6ce328c270501836bdba31b}{01372}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1zip__iterator_a97a3497ce6ce328c270501836bdba31b}{operator!=}}(} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01373}01373 \textcolor{keyword}{const} \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}}\& z1,} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01374}01374 \textcolor{keyword}{const} \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}}\& z2) \textcolor{keyword}{noexcept}(\textcolor{keyword}{noexcept}(z1.pos1 != z2.pos1)) -\/> \textcolor{keywordtype}{bool} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01375}01375 \textcolor{keywordflow}{return} z1.pos1 != z2.pos1;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01376}01376 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01377}\mbox{\hyperlink{structkblib_1_1zip__iterator_a9dd28f3d470cc53e5da4a3d4db2adfb8}{01377}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1zip__iterator_a9dd28f3d470cc53e5da4a3d4db2adfb8}{operator==}}(} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01378}01378 \textcolor{keyword}{const} \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}}\& z1,} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01379}01379 \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}} end) \textcolor{keyword}{noexcept}(\textcolor{keyword}{noexcept}(z1.pos1} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01380}01380 == end.val))} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01381}01381 -\/> \textcolor{keywordtype}{bool} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01382}01382 \textcolor{keywordflow}{return} z1.end1 == end.val;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01383}01383 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01384}\mbox{\hyperlink{structkblib_1_1zip__iterator_a62930b4e57f680dad2a08b65ff2d67dd}{01384}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1zip__iterator_a62930b4e57f680dad2a08b65ff2d67dd}{operator!=}}(} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01385}01385 \textcolor{keyword}{const} \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}}\& z1,} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01386}01386 \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}} end) \textcolor{keyword}{noexcept}(\textcolor{keyword}{noexcept}(z1.pos1} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01387}01387 == end.val))} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01388}01388 -\/> \textcolor{keywordtype}{bool} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01389}01389 \textcolor{keywordflow}{return} z1.end1 != end.val;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01390}01390 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01391}01391 \};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01392}01392 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01393}01393 \textcolor{keyword}{template} <\textcolor{keyword}{typename} It1, \textcolor{keyword}{typename} It2>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01394}\mbox{\hyperlink{structkblib_1_1zip__iterator_3_01_it1_00_01_it1_00_01_it2_01_4}{01394}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01395}\mbox{\hyperlink{structkblib_1_1zip__iterator_3_01_it1_00_01_it1_00_01_it2_01_4_a40990b5737d3cf555f43c8ce419a8316}{01395}} It1 pos1\{\};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01396}\mbox{\hyperlink{structkblib_1_1zip__iterator_3_01_it1_00_01_it1_00_01_it2_01_4_a02db67ba6091db472bf771d844431fc8}{01396}} It1 end1\{\};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01397}\mbox{\hyperlink{structkblib_1_1zip__iterator_3_01_it1_00_01_it1_00_01_it2_01_4_a1486c66d1a6899c1515d685fe4eb2ded}{01397}} It2 pos2\{\};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01398}01398 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01399}\mbox{\hyperlink{structkblib_1_1zip__iterator_3_01_it1_00_01_it1_00_01_it2_01_4_a987bda3dca9ef8d2b6438a87184c1e31}{01399}} \textcolor{keyword}{constexpr} \textcolor{keyword}{static} \textcolor{keywordtype}{bool} is\_nothrow\_copyable} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01400}01400 = std::is\_nothrow\_copy\_constructible::value} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01401}01401 and std::is\_nothrow\_copy\_constructible::value;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01402}01402 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01403}\mbox{\hyperlink{structkblib_1_1zip__iterator_3_01_it1_00_01_it1_00_01_it2_01_4_a23c221b6191a1a8b68d3026a65917d3f}{01403}} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1zip__iterator_3_01_it1_00_01_it1_00_01_it2_01_4_a23c221b6191a1a8b68d3026a65917d3f}{operator++}}() noexcept(noexcept(++pos1)) -\/> \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}}\& \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01404}01404 ++pos1;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01405}01405 ++pos2;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01406}01406 \textcolor{keywordflow}{return} *\textcolor{keyword}{this};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01407}01407 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01408}\mbox{\hyperlink{structkblib_1_1zip__iterator_3_01_it1_00_01_it1_00_01_it2_01_4_a75d534e3ff333f4f8d06640534d33ddb}{01408}} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1zip__iterator_3_01_it1_00_01_it1_00_01_it2_01_4_a75d534e3ff333f4f8d06640534d33ddb}{operator++}}(\textcolor{keywordtype}{int}) \textcolor{keyword}{noexcept}(is\_nothrow\_copyable and \textcolor{keyword}{noexcept}(++pos1))} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01409}01409 -\/> \textcolor{keyword}{const} \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01410}01410 \textcolor{keyword}{auto} tmp = *\textcolor{keyword}{this};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01411}01411 ++pos1;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01412}01412 ++pos2;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01413}01413 \textcolor{keywordflow}{return} tmp;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01414}01414 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01415}01415 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01416}\mbox{\hyperlink{structkblib_1_1zip__iterator_3_01_it1_00_01_it1_00_01_it2_01_4_a2476301182254960b4663c67fab8c69c}{01416}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1zip__iterator_3_01_it1_00_01_it1_00_01_it2_01_4_a2476301182254960b4663c67fab8c69c}{operator*}}() -\/> \textcolor{keyword}{auto} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01417}01417 \textcolor{keywordflow}{return} std::forward\_as\_tuple(*pos1, *pos2);} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01418}01418 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01419}01419 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01420}\mbox{\hyperlink{structkblib_1_1zip__iterator_3_01_it1_00_01_it1_00_01_it2_01_4_a748f9442c3fb5c1c27cdcef3c606ca08}{01420}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1zip__iterator_3_01_it1_00_01_it1_00_01_it2_01_4_a748f9442c3fb5c1c27cdcef3c606ca08}{begin}}() const noexcept(is\_nothrow\_copyable)} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01421}01421 -\/> \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01422}01422 \textcolor{keywordflow}{return} *\textcolor{keyword}{this};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01423}01423 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01424}\mbox{\hyperlink{structkblib_1_1zip__iterator_3_01_it1_00_01_it1_00_01_it2_01_4_a7ae57d7cada9676f2b96d97da6bd7b18}{01424}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1zip__iterator_3_01_it1_00_01_it1_00_01_it2_01_4_a7ae57d7cada9676f2b96d97da6bd7b18}{end}}() const} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01425}01425 noexcept(\mbox{\hyperlink{namespacestd}{std}}::is\_nothrow\_copy\_constructible::value)} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01426}01426 -\/> \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01427}01427 \textcolor{keywordflow}{return} \{end1, end1, pos2\};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01428}01428 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01429}01429 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01430}\mbox{\hyperlink{structkblib_1_1zip__iterator_3_01_it1_00_01_it1_00_01_it2_01_4_a5a582ce768af27541ce63a2f8dbc5606}{01430}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1zip__iterator_3_01_it1_00_01_it1_00_01_it2_01_4_a5a582ce768af27541ce63a2f8dbc5606}{operator==}}(} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01431}01431 \textcolor{keyword}{const} \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}}\& z1,} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01432}01432 \textcolor{keyword}{const} \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}}\& z2) \textcolor{keyword}{noexcept}(\textcolor{keyword}{noexcept}(z1.pos1 == z2.pos1)) -\/> \textcolor{keywordtype}{bool} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01433}01433 \textcolor{keywordflow}{return} z1.pos1 == z2.pos1;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01434}01434 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01435}\mbox{\hyperlink{structkblib_1_1zip__iterator_3_01_it1_00_01_it1_00_01_it2_01_4_a470d795de8ac51841f6293c6c0131229}{01435}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1zip__iterator_3_01_it1_00_01_it1_00_01_it2_01_4_a470d795de8ac51841f6293c6c0131229}{operator!=}}(} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01436}01436 \textcolor{keyword}{const} \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}}\& z1,} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01437}01437 \textcolor{keyword}{const} \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}}\& z2) \textcolor{keyword}{noexcept}(\textcolor{keyword}{noexcept}(z1.pos1 == z2.pos1)) -\/> \textcolor{keywordtype}{bool} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01438}01438 \textcolor{keywordflow}{return} z1.pos1 != z2.pos1;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01439}01439 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01440}01440 \};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01441}01441 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01453}01453 \textcolor{keyword}{template} <\textcolor{keyword}{typename} InputIt1, \textcolor{keyword}{typename} EndIt, \textcolor{keyword}{typename} InputIt2>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01454}\mbox{\hyperlink{namespacekblib_a0768784de97af5384c76b4009f22fb31}{01454}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_af06b17342da0e55aff646066ce8c283d}{zip}}(InputIt1 begin1, EndIt end1, InputIt2 begin2) \textcolor{keyword}{noexcept}(} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01455}01455 \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator::is\_nothrow\_copyable}})} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01456}01456 -\/> \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01457}01457 \textcolor{keywordflow}{return} \{begin1, end1, begin2\};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01458}01458 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01459}01459 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01469}01469 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Range1, \textcolor{keyword}{typename} Range2>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01470}\mbox{\hyperlink{namespacekblib_af06b17342da0e55aff646066ce8c283d}{01470}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_af06b17342da0e55aff646066ce8c283d}{zip}}(Range1\&\& r1, Range2\&\& r2) \textcolor{keyword}{noexcept}(} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01471}01471 \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}}<\textcolor{keyword}{decltype}(begin(r1)), \textcolor{keyword}{decltype}(end(r1)),} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01472}01472 \textcolor{keyword}{decltype}(begin(r2))>::is\_nothrow\_copyable)} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01473}01473 -\/> \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}}<\textcolor{keyword}{decltype}(begin(r1)), \textcolor{keyword}{decltype}(end(r1)),} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01474}01474 \textcolor{keyword}{decltype}(begin(r2))> \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01475}01475 \textcolor{keywordflow}{return} \{begin(r1), end(r1), begin(r2)\};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01476}01476 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01477}01477 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01479}01479 \textcolor{keyword}{template} <\textcolor{keyword}{typename} ForwardIt, \textcolor{keyword}{typename} EndIt>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01480}\mbox{\hyperlink{classkblib_1_1adjacent__iterator}{01480}} \textcolor{keyword}{class }\mbox{\hyperlink{classkblib_1_1adjacent__iterator}{adjacent\_iterator}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01481}01481 \textcolor{keyword}{public}:} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01482}\mbox{\hyperlink{classkblib_1_1adjacent__iterator_a11b90917ad90184e3eae443633eec6a1}{01482}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1adjacent__iterator_a11b90917ad90184e3eae443633eec6a1}{difference\_type}} = std::ptrdiff\_t;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01483}\mbox{\hyperlink{classkblib_1_1adjacent__iterator_a75c20b2ecf2537cf64c242d584bc8c7b}{01483}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1adjacent__iterator_a75c20b2ecf2537cf64c242d584bc8c7b}{base\_reference}} = \textcolor{keyword}{typename} std::iterator\_traits::reference;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01484}\mbox{\hyperlink{classkblib_1_1adjacent__iterator_a588c521234677de4169d38018973f7a5}{01484}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1adjacent__iterator_a588c521234677de4169d38018973f7a5}{value\_type}} = std::pair;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01485}\mbox{\hyperlink{classkblib_1_1adjacent__iterator_aa760511bd608571930a332d779575ee4}{01485}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1adjacent__iterator_aa760511bd608571930a332d779575ee4}{pointer}} = void;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01486}\mbox{\hyperlink{classkblib_1_1adjacent__iterator_a615f7c9cb408682a160a6641ea5b8b8e}{01486}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1adjacent__iterator_a615f7c9cb408682a160a6641ea5b8b8e}{reference}} = \mbox{\hyperlink{classkblib_1_1adjacent__iterator_a588c521234677de4169d38018973f7a5}{value\_type}};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01487}\mbox{\hyperlink{classkblib_1_1adjacent__iterator_a08bf0f681d552710137143015d90d6ea}{01487}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1adjacent__iterator_a08bf0f681d552710137143015d90d6ea}{iterator\_category}} = std::input\_iterator\_tag;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01488}01488 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01489}01489 \textcolor{keyword}{private}:} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01490}01490 ForwardIt it;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01491}01491 \};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01492}01492 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01499}01499 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Container, \textcolor{keyword}{typename} F>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01500}\mbox{\hyperlink{classkblib_1_1back__insert__iterator___f}{01500}} \textcolor{keyword}{class }\mbox{\hyperlink{classkblib_1_1back__insert__iterator___f}{back\_insert\_iterator\_F}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01501}01501 \textcolor{keyword}{public}:} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01508}\mbox{\hyperlink{classkblib_1_1back__insert__iterator___f_a9fa18d40886231566e739f903a61a14c}{01508}} \textcolor{keyword}{explicit} \mbox{\hyperlink{classkblib_1_1back__insert__iterator___f_a9fa18d40886231566e739f903a61a14c}{back\_insert\_iterator\_F}}(Container\& c, F f)} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01509}01509 : container(c)} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01510}01510 , fun(\mbox{\hyperlink{namespacestd}{std}}::\mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7aa3734a903022249b3010be1897042568e}{move}}(f)) \{\}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01511}01511 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01512}\mbox{\hyperlink{classkblib_1_1back__insert__iterator___f_acaa046f4aeb902ee763c778f80b64852}{01512}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1back__insert__iterator___f_acaa046f4aeb902ee763c778f80b64852}{value\_type}} = void;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01513}\mbox{\hyperlink{classkblib_1_1back__insert__iterator___f_a2101e9525dcdb512c6cb5b1c8dc59baf}{01513}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1back__insert__iterator___f_a2101e9525dcdb512c6cb5b1c8dc59baf}{difference\_type}} = void;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01514}\mbox{\hyperlink{classkblib_1_1back__insert__iterator___f_a602984b761a231e9cdf22f097399d605}{01514}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1back__insert__iterator___f_a602984b761a231e9cdf22f097399d605}{pointer}} = void;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01515}\mbox{\hyperlink{classkblib_1_1back__insert__iterator___f_add2bfd7ffa380fbe49edcc4e0af08ccd}{01515}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1back__insert__iterator___f_add2bfd7ffa380fbe49edcc4e0af08ccd}{reference}} = void;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01516}\mbox{\hyperlink{classkblib_1_1back__insert__iterator___f_a23bdfed8ea79672e24163f58efb39bab}{01516}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1back__insert__iterator___f_a23bdfed8ea79672e24163f58efb39bab}{iterator\_category}} = std::output\_iterator\_tag;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01517}01517 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01518}01518 \textcolor{keyword}{template} <\textcolor{keyword}{typename} V>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01526}\mbox{\hyperlink{classkblib_1_1back__insert__iterator___f_a9f9b168de156becfe3821ed22a42fe25}{01526}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1back__insert__iterator___f_a9f9b168de156becfe3821ed22a42fe25}{operator=}}(V\&\& value) -\/> \mbox{\hyperlink{classkblib_1_1back__insert__iterator___f}{back\_insert\_iterator\_F}}\& \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01527}01527 container.push\_back(\mbox{\hyperlink{namespacekblib_a9b10acd2ddaea118b990e1177f626722}{invoke}}(fun, std::forward(value)));} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01528}01528 \textcolor{keywordflow}{return} *\textcolor{keyword}{this};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01529}01529 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01530}01530 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01534}\mbox{\hyperlink{classkblib_1_1back__insert__iterator___f_a5c02586f5092465ccfaabd732763454a}{01534}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1back__insert__iterator___f_a5c02586f5092465ccfaabd732763454a}{operator*}}() -\/> \mbox{\hyperlink{classkblib_1_1back__insert__iterator___f}{back\_insert\_iterator\_F}}\& \{ \textcolor{keywordflow}{return} *\textcolor{keyword}{this}; \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01538}\mbox{\hyperlink{classkblib_1_1back__insert__iterator___f_aada24e18aaf968432b0c9082149bb0fa}{01538}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1back__insert__iterator___f_aada24e18aaf968432b0c9082149bb0fa}{operator++}}() -\/> \mbox{\hyperlink{classkblib_1_1back__insert__iterator___f}{back\_insert\_iterator\_F}}\& \{ \textcolor{keywordflow}{return} *\textcolor{keyword}{this}; \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01539}01539 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01540}01540 \textcolor{keyword}{private}:} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01541}01541 Container\& container;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01542}01542 F fun;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01543}01543 \};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01544}01544 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01549}01549 \textcolor{keyword}{template} <\textcolor{keyword}{typename} F>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01550}\mbox{\hyperlink{classkblib_1_1consume__iterator}{01550}} \textcolor{keyword}{class }\mbox{\hyperlink{classkblib_1_1consume__iterator}{consume\_iterator}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01551}01551 \textcolor{keyword}{private}:} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01552}01552 F fun;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01553}01553 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01554}01554 \textcolor{keyword}{public}:} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01555}\mbox{\hyperlink{classkblib_1_1consume__iterator_a81cde5eec46e2b75407bef70b48562dc}{01555}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1consume__iterator_a81cde5eec46e2b75407bef70b48562dc}{value\_type}} = void;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01556}\mbox{\hyperlink{classkblib_1_1consume__iterator_a93a1b11db105c8989e51c1973dc3e4dc}{01556}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1consume__iterator_a93a1b11db105c8989e51c1973dc3e4dc}{difference\_type}} = void;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01557}\mbox{\hyperlink{classkblib_1_1consume__iterator_a336329a5c090935c81adf1f817a8a853}{01557}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1consume__iterator_a336329a5c090935c81adf1f817a8a853}{pointer}} = void;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01558}\mbox{\hyperlink{classkblib_1_1consume__iterator_a7506aacae969baa4aa39083c70ca98b9}{01558}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1consume__iterator_a7506aacae969baa4aa39083c70ca98b9}{reference}} = void;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01559}\mbox{\hyperlink{classkblib_1_1consume__iterator_a2c560b450f20de6596db3d57de35f3df}{01559}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1consume__iterator_a2c560b450f20de6596db3d57de35f3df}{iterator\_category}} = std::output\_iterator\_tag;} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01560}01560 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01566}\mbox{\hyperlink{classkblib_1_1consume__iterator_a62c77a5c20369df5deef0a0bb5efebc6}{01566}} \textcolor{keyword}{explicit} \mbox{\hyperlink{classkblib_1_1consume__iterator_a62c77a5c20369df5deef0a0bb5efebc6}{consume\_iterator}}(F f)} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01567}01567 : fun(\mbox{\hyperlink{namespacestd}{std}}::\mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7aa3734a903022249b3010be1897042568e}{move}}(f)) \{\}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01568}01568 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01569}\mbox{\hyperlink{classkblib_1_1consume__iterator_a23d169fca2c7fd8e11bde2c1f25c7054}{01569}} \mbox{\hyperlink{classkblib_1_1consume__iterator_a23d169fca2c7fd8e11bde2c1f25c7054}{consume\_iterator}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1consume__iterator}{consume\_iterator}}\&) = \textcolor{keywordflow}{default};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01570}\mbox{\hyperlink{classkblib_1_1consume__iterator_ad320dc49238ed760ce28832769babfa8}{01570}} \mbox{\hyperlink{classkblib_1_1consume__iterator_ad320dc49238ed760ce28832769babfa8}{consume\_iterator}}(\mbox{\hyperlink{classkblib_1_1consume__iterator}{consume\_iterator}}\&\&) = \textcolor{keywordflow}{default};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01571}\mbox{\hyperlink{classkblib_1_1consume__iterator_a54c962299e5378a857732ae5024c0fd6}{01571}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1consume__iterator_a54c962299e5378a857732ae5024c0fd6}{operator=}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1consume__iterator}{consume\_iterator}}\&) \& -\/> \mbox{\hyperlink{classkblib_1_1consume__iterator}{consume\_iterator}}\& = \textcolor{keywordflow}{default};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01572}\mbox{\hyperlink{classkblib_1_1consume__iterator_af8231c388ef7b4e115187983cf5fe282}{01572}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1consume__iterator_af8231c388ef7b4e115187983cf5fe282}{operator=}}(\mbox{\hyperlink{classkblib_1_1consume__iterator}{consume\_iterator}}\&\&) \& -\/> \mbox{\hyperlink{classkblib_1_1consume__iterator}{consume\_iterator}}\& = \textcolor{keywordflow}{default};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01573}\mbox{\hyperlink{classkblib_1_1consume__iterator_a6e19bee47a0745a49021612c36126d40}{01573}} \mbox{\hyperlink{classkblib_1_1consume__iterator_a6e19bee47a0745a49021612c36126d40}{\string~consume\_iterator}}() = \textcolor{keywordflow}{default};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01574}01574 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01581}01581 \textcolor{keyword}{template} <\textcolor{keyword}{typename} V>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01582}\mbox{\hyperlink{classkblib_1_1consume__iterator_ab5d70bbb5a0be3ad39a3edbbcc16ec9c}{01582}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1consume__iterator_ab5d70bbb5a0be3ad39a3edbbcc16ec9c}{operator=}}(V\&\& value) \textcolor{keyword}{noexcept}(} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01583}01583 \textcolor{keyword}{noexcept}(\mbox{\hyperlink{namespacekblib_a9b10acd2ddaea118b990e1177f626722}{kblib::invoke}}(fun, std::forward(value))))} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01584}01584 -\/> \mbox{\hyperlink{namespacekblib_a3cec35675700d7e15c9139e0497768e6}{kblib::ignore\_t}}(value))),} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01585}01585 \mbox{\hyperlink{classkblib_1_1consume__iterator}{consume\_iterator}}\&> \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01586}01586 \mbox{\hyperlink{namespacekblib_a9b10acd2ddaea118b990e1177f626722}{kblib::invoke}}(fun, std::forward(value));} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01587}01587 \textcolor{keywordflow}{return} *\textcolor{keyword}{this};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01588}01588 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01589}01589 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01593}\mbox{\hyperlink{classkblib_1_1consume__iterator_aff18ad61701a6ec7fe3a2273dec694ae}{01593}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1consume__iterator_aff18ad61701a6ec7fe3a2273dec694ae}{operator*}}() -\/> \mbox{\hyperlink{classkblib_1_1consume__iterator}{consume\_iterator}}\& \{ \textcolor{keywordflow}{return} *\textcolor{keyword}{this}; \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01597}\mbox{\hyperlink{classkblib_1_1consume__iterator_ae5bbcd29d31d402ca64421f319eaea5d}{01597}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1consume__iterator_ae5bbcd29d31d402ca64421f319eaea5d}{operator++}}() -\/> \mbox{\hyperlink{classkblib_1_1consume__iterator}{consume\_iterator}}\& \{ \textcolor{keywordflow}{return} *\textcolor{keyword}{this}; \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01601}\mbox{\hyperlink{classkblib_1_1consume__iterator_acb963f8723b97e5fe983b92e90feb62d}{01601}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1consume__iterator_acb963f8723b97e5fe983b92e90feb62d}{operator++}}(\textcolor{keywordtype}{int}) -\/> \mbox{\hyperlink{classkblib_1_1consume__iterator}{consume\_iterator}}\& \{ \textcolor{keywordflow}{return} *\textcolor{keyword}{this}; \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01602}01602 \};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01603}01603 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01613}01613 \textcolor{keyword}{template} <\textcolor{keyword}{typename} F>} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01614}\mbox{\hyperlink{namespacekblib_a18d941bdcaa41e86334ca14ffa954b28}{01614}} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a18d941bdcaa41e86334ca14ffa954b28}{consumer}}(F f) -\/> \mbox{\hyperlink{classkblib_1_1consume__iterator}{consume\_iterator}} \{} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01615}01615 \textcolor{keywordflow}{return} \mbox{\hyperlink{classkblib_1_1consume__iterator}{consume\_iterator}}\{std::move(f)\};} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01616}01616 \}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01617}01617 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01618}01618 \} \textcolor{comment}{// namespace kblib}} \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01619}01619 } \DoxyCodeLine{\Hypertarget{iterators_8h_source_l01620}01620 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// KBLIB\_ITERATORS\_H}} \end{DoxyCode}