\hypertarget{visitation__benchmarks_8cpp_source}{}\doxysection{visitation\+\_\+benchmarks.\+cpp} \label{visitation__benchmarks_8cpp_source}\index{tests/visitation\_benchmarks.cpp@{tests/visitation\_benchmarks.cpp}} \mbox{\hyperlink{visitation__benchmarks_8cpp}{Go to the documentation of this file.}} \begin{DoxyCode}{0} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00001}00001 \textcolor{comment}{/* *****************************************************************************}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00002}00002 \textcolor{comment}{ * \%\{QMAKE\_PROJECT\_NAME\}}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00003}00003 \textcolor{comment}{ * Copyright (c) \%YEAR\% killerbee}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00004}00004 \textcolor{comment}{ *}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00005}00005 \textcolor{comment}{ * This program is free software: you can redistribute it and/or modify}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00006}00006 \textcolor{comment}{ * it under the terms of the GNU General Public License as published by}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00007}00007 \textcolor{comment}{ * the Free Software Foundation, either version 3 of the License, or}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00008}00008 \textcolor{comment}{ * (at your option) any later version.}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00009}00009 \textcolor{comment}{ *}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00010}00010 \textcolor{comment}{ * This program is distributed in the hope that it will be useful,}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00011}00011 \textcolor{comment}{ * but WITHOUT ANY WARRANTY; without even the implied warranty of}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00012}00012 \textcolor{comment}{ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00013}00013 \textcolor{comment}{ * GNU General Public License for more details.}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00014}00014 \textcolor{comment}{ *}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00015}00015 \textcolor{comment}{ * You should have received a copy of the GNU General Public License}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00016}00016 \textcolor{comment}{ * along with this program. If not, see .}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00017}00017 \textcolor{comment}{ * ****************************************************************************/}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00018}00018 \textcolor{preprocessor}{\#include "{}\mbox{\hyperlink{poly__obj_8h}{kblib/poly\_obj.h}}"{}}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00019}00019 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00020}\mbox{\hyperlink{visitation__benchmarks_8cpp_a4a227915957ab16187389713b5f20dca}{00020}} \textcolor{preprocessor}{\#define CATCH\_CONFIG\_ENABLE\_BENCHMARKING}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00021}00021 \textcolor{preprocessor}{\#include "{}catch.hpp"{}}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00022}00022 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00023}00023 \textcolor{comment}{//\#define FAST\_TEST}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00024}00024 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00025}00025 \textcolor{preprocessor}{\#if KBLIB\_USE\_CXX17}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00026}00026 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00027}00027 \textcolor{preprocessor}{\# ifndef FAST\_TEST}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00028}00028 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00029}00029 \textcolor{keyword}{namespace }\{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00030}00030 \textcolor{keyword}{struct }Base \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00031}00031 \textcolor{keyword}{virtual} \textcolor{keyword}{auto} operator()() \textcolor{keyword}{const} \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{unsigned} = 0;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00032}00032 Base() = \textcolor{keywordflow}{default};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00033}00033 Base(\textcolor{keyword}{const} Base\&) = \textcolor{keywordflow}{default};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00034}00034 Base(Base\&\&) \textcolor{keyword}{noexcept} = \textcolor{keywordflow}{default};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00035}00035 \textcolor{keyword}{virtual} \string~Base() = \textcolor{keywordflow}{default};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00036}00036 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00037}00037 \textcolor{comment}{// this is used, but the compiler doesn't think so because it's in a .cpp}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00038}00038 \textcolor{comment}{// file}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00039}00039 [[maybe\_unused]] \textcolor{keyword}{constexpr} \textcolor{keyword}{static} \textcolor{keyword}{inline} std::size\_t max\_derived\_size} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00040}00040 = \textcolor{keyword}{sizeof}(unsigned);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00041}00041 \};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00042}00042 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00043}00043 \textcolor{keyword}{struct }thrower final : Base \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00044}00044 \textcolor{keyword}{auto} operator()() \textcolor{keyword}{const} \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{unsigned} \textcolor{keyword}{override} \{ \textcolor{keywordflow}{return} member; \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00045}00045 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00046}00046 \textcolor{keywordtype}{unsigned} member;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00047}00047 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00048}00048 thrower(\textcolor{keywordtype}{unsigned} i = 0)} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00049}00049 : member(i) \{\}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00050}00050 thrower(\textcolor{keyword}{const} thrower\&) = \textcolor{keywordflow}{default};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00051}00051 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00052}00052 \textcolor{keyword}{auto} operator=(\textcolor{keyword}{const} thrower\& other) \& -\/> thrower\& \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00053}00053 check\_throw(other.member);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00054}00054 member = other.member;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00055}00055 \textcolor{keywordflow}{return} *\textcolor{keyword}{this};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00056}00056 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00057}00057 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00058}00058 \textcolor{keyword}{private}:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00059}00059 \textcolor{keyword}{static} \textcolor{keyword}{auto} check\_throw(\textcolor{keywordtype}{unsigned} v) -\/> \textcolor{keywordtype}{void} \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00060}00060 \textcolor{keywordflow}{if} ((v \& 7u) == 0) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00061}00061 \textcolor{keywordflow}{throw} 0;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00062}00062 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00063}00063 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00064}00064 \};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00065}00065 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00066}00066 \textcolor{keyword}{struct }fptr \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00067}00067 \textcolor{keywordtype}{unsigned} member;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00068}00068 \textcolor{keyword}{auto} (*p)(\textcolor{keyword}{const} fptr*) \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{unsigned};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00069}00069 \textcolor{keyword}{auto} operator()() \textcolor{keyword}{const} \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{unsigned} \{ \textcolor{keywordflow}{return} p(\textcolor{keyword}{this}); \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00070}00070 \};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00071}00071 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00072}\mbox{\hyperlink{visitation__benchmarks_8cpp_ad2a78c18d67d98fcb66280429013e808}{00072}} \textcolor{preprocessor}{\# define MAKE\_DERIVED2(Number, Expr) \(\backslash\)}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00073}00073 \textcolor{preprocessor}{ auto fptr\_d\#\#Number(const fptr* p) noexcept-\/>unsigned \{ \(\backslash\)}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00074}00074 \textcolor{preprocessor}{ const auto x = p-\/>member; \(\backslash\)}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00075}00075 \textcolor{preprocessor}{ return Expr; \(\backslash\)}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00076}00076 \textcolor{preprocessor}{ \} \(\backslash\)}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00077}00077 \textcolor{preprocessor}{ struct Derived\#\#Number final : Base \{ \(\backslash\)}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00078}00078 \textcolor{preprocessor}{ auto operator()() const noexcept -\/> unsigned override \{ \(\backslash\)}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00079}00079 \textcolor{preprocessor}{ return Expr; \(\backslash\)}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00080}00080 \textcolor{preprocessor}{ \} \(\backslash\)}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00081}00081 \textcolor{preprocessor}{ unsigned x; \(\backslash\)}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00082}00082 \textcolor{preprocessor}{ Derived\#\#Number(unsigned i) \(\backslash\)}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00083}00083 \textcolor{preprocessor}{ : x(i) \{\} \(\backslash\)}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00084}00084 \textcolor{preprocessor}{ \}}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00085}\mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{00085}} \textcolor{preprocessor}{\# define MAKE\_DERIVED(Number, Expr) MAKE\_DERIVED2(Number, Expr)}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00086}00086 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00087}00087 \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} big\_number = \mbox{\hyperlink{structkblib_1_1fnv_1_1fnv__prime}{kblib::fnv::fnv\_prime::value}};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00088}00088 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00089}00089 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00090}00090 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x * 2);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00091}00091 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x / 2);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00092}00092 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, \string~x);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00093}00093 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x + 42);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00094}00094 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x * 2 + 42);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00095}00095 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, -\/x);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00096}00096 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x -\/ 42);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00097}00097 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, 42 -\/ x);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00098}00098 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (x * x));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00099}00099 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (x * x * 2));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00100}00100 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, -\/x -\/ 42);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00101}00101 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x \& 42);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00102}00102 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x | 42);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00103}00103 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x << 2);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00104}00104 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x >> 2);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00105}00105 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, \string~x << 2);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00106}00106 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, \string~x >> 2);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00107}00107 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (x >> 8) | (x << 24));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00108}00108 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (x >> 16) | (x << 16));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00109}00109 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (x >> 24) | (x << 8));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00110}00110 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (\string~x >> 8) | (\string~x << 24));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00111}00111 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (\string~x >> 16) | (\string~x << 16));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00112}00112 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (\string~x >> 24) | (\string~x << 8));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00113}00113 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (\textcolor{keyword}{static\_cast<}\textcolor{keywordtype}{void}\textcolor{keyword}{>}(x), 42));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00114}00114 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (x >> 16) | (\string~x << 16));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00115}00115 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (\string~x >> 16) | (x << 16));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00116}00116 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x \string^ 42);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00117}00117 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x \string^ ((x >> 16) | (x << 16)));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00118}00118 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, -\/\string~x);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00119}00119 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, \string~-\/x);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00120}00120 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x * 42);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00121}00121 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, -\/x * 42);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00122}00122 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, -\/x / 42);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00123}00123 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x \% 42);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00124}00124 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, -\/(x \% 42));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00125}00125 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (x * big\_number));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00126}00126 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x \string^ big\_number);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00127}00127 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x + big\_number);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00128}00128 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x -\/ big\_number);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00129}00129 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, big\_number -\/ x);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00130}00130 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x / big\_number);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00131}00131 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x \% big\_number);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00132}00132 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, big\_number / x);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00133}00133 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, big\_number \% x);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00134}00134 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (\textcolor{keywordtype}{void}(x), big\_number));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00135}00135 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x + (big\_number >> 16));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00136}00136 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x + (big\_number >> 24));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00137}00137 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (x << 16) + big\_number);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00138}00138 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (x << 16) -\/ big\_number);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00139}00139 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, big\_number -\/ (x << 16));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00140}00140 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (x << 16) \string^ big\_number);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00141}00141 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (x << 16) / big\_number);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00142}00142 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, big\_number / (x << 16));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00143}00143 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (x << 16) \& big\_number);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00144}00144 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (x << 16) + (big\_number \& 0x0000FFFF));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00145}00145 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (x << 16) \% big\_number);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00146}00146 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, big\_number \% (x << 16));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00147}00147 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x * 42 + big\_number);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00148}00148 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (x * (big\_number \% 42)));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00149}00149 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (x * (-\/big\_number \% 42)));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00150}00150 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (x * 14 + (big\_number >> 16)));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00151}00151 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (x * 14 -\/ (big\_number >> 16)));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00152}00152 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (x * 14 \string^ (big\_number >> 16)));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00153}00153 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00154}00154 \textcolor{keyword}{using }variant\_type = std::variant<} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00155}00155 Derived0, Derived1, Derived2, Derived3, Derived4, Derived5, Derived6,} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00156}00156 Derived7, Derived8, Derived9, Derived10, Derived11, Derived12, Derived13,} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00157}00157 Derived14, Derived15, Derived16, Derived17, Derived18, Derived19, Derived20,} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00158}00158 Derived21, Derived22, Derived23, Derived24, Derived25, Derived26, Derived27,} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00159}00159 Derived28, Derived29, Derived30, Derived31, Derived32, Derived33, Derived34,} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00160}00160 Derived35, Derived36, Derived37, Derived38, Derived39, Derived40, Derived41,} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00161}00161 Derived42, Derived43, Derived44, Derived45, Derived46, Derived47, Derived48,} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00162}00162 Derived49, Derived50, Derived51, Derived52, Derived53, Derived54, Derived55,} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00163}00163 Derived56, Derived57, Derived58, Derived59, Derived60, Derived61, Derived62,} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00164}00164 Derived63>;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00165}00165 \textcolor{keyword}{using }variant\_type\_throws = std::variant<} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00166}00166 Derived0, Derived1, Derived2, Derived3, Derived4, Derived5, Derived6,} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00167}00167 Derived7, Derived8, Derived9, Derived10, Derived11, Derived12, Derived13,} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00168}00168 Derived14, Derived15, Derived16, Derived17, Derived18, Derived19, Derived20,} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00169}00169 Derived21, Derived22, Derived23, Derived24, Derived25, Derived26, Derived27,} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00170}00170 Derived28, Derived29, Derived30, Derived31, Derived32, Derived33, Derived34,} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00171}00171 Derived35, Derived36, Derived37, Derived38, Derived39, Derived40, Derived41,} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00172}00172 Derived42, Derived43, Derived44, Derived45, Derived46, Derived47, Derived48,} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00173}00173 Derived49, Derived50, Derived51, Derived52, Derived53, Derived54, Derived55,} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00174}00174 Derived56, Derived57, Derived58, Derived59, Derived60, Derived61, Derived62,} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00175}00175 Derived63, thrower>;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00176}00176 \textcolor{keyword}{constexpr} std::array<\textcolor{keyword}{decltype}(\&fptr\_d0), 64> fptrs\{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00177}00177 fptr\_d0, fptr\_d1, fptr\_d2, fptr\_d3, fptr\_d4, fptr\_d5, fptr\_d6,} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00178}00178 fptr\_d7, fptr\_d8, fptr\_d9, fptr\_d10, fptr\_d11, fptr\_d12, fptr\_d13,} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00179}00179 fptr\_d14, fptr\_d15, fptr\_d16, fptr\_d17, fptr\_d18, fptr\_d19, fptr\_d20,} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00180}00180 fptr\_d21, fptr\_d22, fptr\_d23, fptr\_d24, fptr\_d25, fptr\_d26, fptr\_d27,} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00181}00181 fptr\_d28, fptr\_d29, fptr\_d30, fptr\_d31, fptr\_d32, fptr\_d33, fptr\_d34,} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00182}00182 fptr\_d35, fptr\_d36, fptr\_d37, fptr\_d38, fptr\_d39, fptr\_d40, fptr\_d41,} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00183}00183 fptr\_d42, fptr\_d43, fptr\_d44, fptr\_d45, fptr\_d46, fptr\_d47, fptr\_d48,} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00184}00184 fptr\_d49, fptr\_d50, fptr\_d51, fptr\_d52, fptr\_d53, fptr\_d54, fptr\_d55,} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00185}00185 fptr\_d56, fptr\_d57, fptr\_d58, fptr\_d59, fptr\_d60, fptr\_d61, fptr\_d62,} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00186}00186 fptr\_d63,} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00187}00187 \};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00188}00188 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00189}00189 \textcolor{keyword}{template} <\textcolor{keywordtype}{unsigned} N = 4u>} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00190}00190 \textcolor{keyword}{auto} make\_fptr(\textcolor{keywordtype}{unsigned} v) \textcolor{keyword}{noexcept} -\/> fptr \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00191}00191 \textcolor{keywordflow}{switch} (v \% N) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00192}00192 \textcolor{keywordflow}{case} 0:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00193}00193 \textcolor{keywordflow}{return} \{v, \&fptr\_d1\};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00194}00194 \textcolor{keywordflow}{case} 1:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00195}00195 \textcolor{keywordflow}{return} \{v, \&fptr\_d2\};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00196}00196 \textcolor{keywordflow}{case} 2:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00197}00197 \textcolor{keywordflow}{return} \{v, \&fptr\_d3\};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00198}00198 \textcolor{keywordflow}{case} 3:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00199}00199 \textcolor{keywordflow}{return} \{v, \&fptr\_d4\};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00200}00200 \textcolor{keywordflow}{default}:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00201}00201 \_\_builtin\_unreachable();} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00202}00202 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00203}00203 \textcolor{keywordflow}{return} \{v, fptrs[v \% N]\};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00204}00204 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00205}00205 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00206}00206 \textcolor{keyword}{template} } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00207}00207 \textcolor{keyword}{auto} do\_push\_elem(std::index\_sequence, T\& d, \textcolor{keywordtype}{unsigned} v, F f) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00208}00208 \textcolor{keyword}{const} \textcolor{keyword}{auto} i = v \% Num;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00209}00209 ((i == Is} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00210}00210 and (d.emplace\_back(f(\mbox{\hyperlink{structkblib_1_1constant}{kblib::constant}}\{\}, v)), \textcolor{keyword}{true}))} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00211}00211 or ...);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00212}00212 \textcolor{keywordflow}{return};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00213}00213 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00214}00214 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00215}00215 \textcolor{keyword}{template} } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00216}00216 \textcolor{keyword}{auto} push\_elem(T\& d, \textcolor{keywordtype}{unsigned} v, F f) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00217}00217 \textcolor{keywordflow}{return} do\_push\_elem(std::make\_index\_sequence\{\}, d, v, f);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00218}00218 \};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00219}00219 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00220}00220 \textcolor{keyword}{template} <\textcolor{keyword}{typename}... Ts>} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00221}00221 \textcolor{keyword}{auto} baseline\_generic(std::vector... args) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00222}00222 \textcolor{keywordflow}{return} (} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00223}00223 \mbox{\hyperlink{namespacekblib_abedf2e5c556e6ab3ebb779227172a2ac}{std::accumulate}}(args.begin(), args.end(), 0u,} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00224}00224 [](\textcolor{keywordtype}{unsigned} accum, \textcolor{keyword}{const} Ts\& x) \{ return accum + x(); \})} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00225}00225 + ... + 0);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00226}00226 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00227}00227 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00228}00228 \} \textcolor{comment}{// namespace}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00229}00229 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00230}\mbox{\hyperlink{visitation__benchmarks_8cpp_a081f71eeb1c1e06f9951b9b74f9bdd08}{00230}} \mbox{\hyperlink{visitation__benchmarks_8cpp_a081f71eeb1c1e06f9951b9b74f9bdd08}{TEST\_CASE}}(\textcolor{stringliteral}{"{}poly\_obj performance(4\_old)"{}}) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00231}00231 \textcolor{keyword}{const} \textcolor{keyword}{auto} start = std::chrono::steady\_clock::now();} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00232}00232 \textcolor{preprocessor}{\# ifdef NDEBUG}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00233}00233 \textcolor{keyword}{constexpr} \textcolor{keywordtype}{unsigned} count = 1000;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00234}00234 \textcolor{preprocessor}{\# else}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00235}00235 \textcolor{keyword}{constexpr} \textcolor{keywordtype}{unsigned} count = 100;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00236}00236 \textcolor{preprocessor}{\# endif}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00237}00237 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00238}00238 \textcolor{preprocessor}{\# ifdef SANITIZERS}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00239}00239 \textcolor{preprocessor}{\# define STR(s) \# s}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00240}00240 std::cout << \textcolor{stringliteral}{"{}Sanitizers active\(\backslash\)n"{}};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00241}00241 \textcolor{preprocessor}{\# endif}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00242}00242 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00243}00243 std::vector> reproducibility\_test;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00244}00244 \textcolor{keyword}{using }poly\_t = \mbox{\hyperlink{classkblib_1_1poly__obj}{kblib::poly\_obj}}<} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00245}00245 Base, \textcolor{keyword}{sizeof}(Derived1),} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00246}00246 \mbox{\hyperlink{structkblib_1_1poly__obj__traits}{kblib::poly\_obj\_traits}}>;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00247}00247 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00248}00248 \textcolor{keyword}{auto} push\_checksum = [\&](\textcolor{keywordtype}{unsigned} s, std::string\_view name) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00249}00249 \textcolor{keyword}{auto} begin = reproducibility\_test.begin();} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00250}00250 \textcolor{keyword}{auto} end = reproducibility\_test.end();} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00251}00251 \textcolor{comment}{// Take only the first result for each run type}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00252}00252 \textcolor{keywordflow}{if} (\mbox{\hyperlink{namespacekblib_a4b49eacc73a9295677cb08d9b7892ff6}{std::find\_if}}(begin, end,} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00253}00253 [\&](\textcolor{keyword}{const} \textcolor{keyword}{auto}\& p) \{ \textcolor{keywordflow}{return} p.second == name; \})} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00254}00254 == end) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00255}00255 reproducibility\_test.emplace\_back(s, name);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00256}00256 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00257}00257 \};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00258}00258 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00259}00259 \textcolor{comment}{/*}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00260}00260 \textcolor{comment}{ * Release / Debug, all times in microseconds:}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00261}00261 \textcolor{comment}{ *}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00262}00262 \textcolor{comment}{ * Four separate contiguous arrays}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00263}00263 \textcolor{comment}{ * baseline: 5.377 / 37.549}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00264}00264 \textcolor{comment}{ * Polymorphism, always valid}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00265}00265 \textcolor{comment}{ * raw pointer: 10.470 / 51.205}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00266}00266 \textcolor{comment}{ * unique\_ptr: 11.826 / 70.346}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00267}00267 \textcolor{comment}{ * poly\_obj: 14.644 / 79.075}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00268}00268 \textcolor{comment}{ * Type erasure, always valid}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00269}00269 \textcolor{comment}{ * std::function: 15.247 / 106.562}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00270}00270 \textcolor{comment}{ * std::visit(v, f): 27.375 / 238.055}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00271}00271 \textcolor{comment}{ * kblib::visit(v, f...): 37.308 / 258.965}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00272}00272 \textcolor{comment}{ * kblib::visit(v)(f...): 37.253 / 288.355}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00273}00273 \textcolor{comment}{ * visit\_indexed: 30.203 / 208.894}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00274}00274 \textcolor{comment}{ * kblib::visit2: 8.407 / 211.649}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00275}00275 \textcolor{comment}{ * kblib::visit2\_nop: 8.650 / 222.502}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00276}00276 \textcolor{comment}{ * std::get\_if: 8.580 / 158.164}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00277}00277 \textcolor{comment}{ * switch (v.index): 8.984 / 170.739}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00278}00278 \textcolor{comment}{ * Polymorphism, checking for invalid}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00279}00279 \textcolor{comment}{ * raw pointer, ch: 15.859 / 56.917}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00280}00280 \textcolor{comment}{ * unique\_ptr, ch: 18.344 / 108.046}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00281}00281 \textcolor{comment}{ * poly\_obj, ch: 18.290 / 96.168}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00282}00282 \textcolor{comment}{ * Type erasure, checking for invalid}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00283}00283 \textcolor{comment}{ * std::function, ch: 25.200 / 122.038}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00284}00284 \textcolor{comment}{ * kblib::visit2\_nop, ch: 12.327 / 322.764}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00285}00285 \textcolor{comment}{ * std::get\_if, ch: 12.386 / 232.006}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00286}00286 \textcolor{comment}{ * switch(v.index()), ch: 16.817 / 203.752}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00287}00287 \textcolor{comment}{ * Type erasure, exceptions for invalid}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00288}00288 \textcolor{comment}{ * std::function, ex: 23.758 / 126.152}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00289}00289 \textcolor{comment}{ * std::visit(v, f), ex: 40.646 / 310.900}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00290}00290 \textcolor{comment}{ * kblib::visit(v, f...), ex: 44.016 / 328.484}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00291}00291 \textcolor{comment}{ * kblib::visit(v)(f...), ex: 46.345 / 377.681}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00292}00292 \textcolor{comment}{ * visit\_indexed, ex: 40.066 / 261.261}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00293}00293 \textcolor{comment}{ * kblib::visit2, ex: 12.353 / 315.509}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00294}00294 \textcolor{comment}{ *}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00295}00295 \textcolor{comment}{ * Overall test runtime: 80s / 286s}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00296}00296 \textcolor{comment}{ *}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00297}00297 \textcolor{comment}{ * Conclusions:}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00298}00298 \textcolor{comment}{ *}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00299}00299 \textcolor{comment}{ * In release builds, visit\_indexed, std::function, and std::visit are very}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00300}00300 \textcolor{comment}{ * slow, contiguous access is very fast, everything else is comparable to}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00301}00301 \textcolor{comment}{ * each other, except that exceptions are, of course, very slow.}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00302}00302 \textcolor{comment}{ *}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00303}00303 \textcolor{comment}{ * In debug builds, type erasure seems to be extremely slow, enough even to}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00304}00304 \textcolor{comment}{ * mostly drown out the exceptions, but the fastest is std::function by far.}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00305}00305 \textcolor{comment}{ * visit2 is a bit faster in release builds, but poly\_obj isn't much slower}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00306}00306 \textcolor{comment}{ * and is much much faster than it in debug. In every instance, poly\_obj}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00307}00307 \textcolor{comment}{ * compares favorably to unique\_ptr, which is good, because it is meant to}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00308}00308 \textcolor{comment}{ * replace it in some uses.}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00309}00309 \textcolor{comment}{ *}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00310}00310 \textcolor{comment}{ * std::get\_if and switch are predictably the fastest way of accessing a}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00311}00311 \textcolor{comment}{ * variant in debug, but in release are tied with visit2. I do not think}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00312}00312 \textcolor{comment}{ * that the messy and verbose code is justified by the debug performance}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00313}00313 \textcolor{comment}{ * gain compared to the other options.}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00314}00314 \textcolor{comment}{ *}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00315}00315 \textcolor{comment}{ * If you want to use exceptions for invalid objects, kblib::visit2 is the}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00316}00316 \textcolor{comment}{ * fastest way, followed by std::function. The others are equally twice as}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00317}00317 \textcolor{comment}{ * slow.}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00318}00318 \textcolor{comment}{ *}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00319}00319 \textcolor{comment}{ * I cannot tell why visit\_indexed is so much slower than visit2 in this}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00320}00320 \textcolor{comment}{ * test. Their code is very similar. It must be the additional parameter}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00321}00321 \textcolor{comment}{ * causing delays in setting up the call.}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00322}00322 \textcolor{comment}{ *}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00323}00323 \textcolor{comment}{ */}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00324}00324 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00325}00325 \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00326}00326 std::vector d1;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00327}00327 std::vector d2;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00328}00328 std::vector d3;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00329}00329 std::vector d4;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00330}00330 \mbox{\hyperlink{structkblib_1_1_f_n_v__hash}{kblib::FNV32\_hash}} h;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00331}00331 \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} i : \mbox{\hyperlink{namespacekblib_a72690688922a2d4ae9a3e46ff0c1a9a9}{kblib::range}}(count)) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00332}00332 \textcolor{keyword}{auto} v = \textcolor{keyword}{static\_cast<}\textcolor{keywordtype}{unsigned}\textcolor{keyword}{>}(h(i));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00333}00333 \textcolor{keywordflow}{switch} (v \% 4) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00334}00334 \textcolor{keywordflow}{case} 0:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00335}00335 d1.emplace\_back(v);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00336}00336 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00337}00337 \textcolor{keywordflow}{case} 1:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00338}00338 d2.emplace\_back(v);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00339}00339 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00340}00340 \textcolor{keywordflow}{case} 2:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00341}00341 d3.emplace\_back(v);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00342}00342 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00343}00343 \textcolor{keywordflow}{case} 3:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00344}00344 d4.emplace\_back(v);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00345}00345 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00346}00346 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00347}00347 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00348}00348 BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}baseline"{}})(Catch::Benchmark::Chronometer meter) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00349}00349 \textcolor{keywordtype}{unsigned} accum\{\};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00350}00350 meter.measure([\&] \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00351}00351 \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d1) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00352}00352 accum += x();} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00353}00353 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00354}00354 \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d2) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00355}00355 accum += x();} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00356}00356 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00357}00357 \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d3) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00358}00358 accum += x();} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00359}00359 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00360}00360 \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d4) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00361}00361 accum += x();} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00362}00362 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00363}00363 \textcolor{keywordflow}{return} accum;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00364}00364 \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00365}00365 push\_checksum(accum, \textcolor{stringliteral}{"{}baseline"{}});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00366}00366 \};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00367}00367 BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}baseline\_generic"{}})} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00368}00368 (Catch::Benchmark::Chronometer meter) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00369}00369 \textcolor{keywordtype}{unsigned} accum\{\};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00370}00370 meter.measure([\&] \{ accum = baseline\_generic(d1, d2, d3, d4); \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00371}00371 push\_checksum(accum, \textcolor{stringliteral}{"{}baseline\_generic"{}});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00372}00372 \};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00373}00373 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00374}00374 BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}raw pointer"{}})(Catch::Benchmark::Chronometer meter) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00375}00375 std::vector d;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00376}00376 \mbox{\hyperlink{structkblib_1_1_f_n_v__hash}{kblib::FNV32\_hash}} h;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00377}00377 \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} i : \mbox{\hyperlink{namespacekblib_a72690688922a2d4ae9a3e46ff0c1a9a9}{kblib::range}}(count)) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00378}00378 \textcolor{keyword}{auto} v = \textcolor{keyword}{static\_cast<}\textcolor{keywordtype}{unsigned}\textcolor{keyword}{>}(h(i));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00379}00379 \textcolor{keywordflow}{switch} (v \% 4) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00380}00380 \textcolor{keywordflow}{case} 0:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00381}00381 d.push\_back(\textcolor{keyword}{new} Derived0(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00382}00382 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00383}00383 \textcolor{keywordflow}{case} 1:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00384}00384 d.push\_back(\textcolor{keyword}{new} Derived1(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00385}00385 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00386}00386 \textcolor{keywordflow}{case} 2:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00387}00387 d.push\_back(\textcolor{keyword}{new} Derived2(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00388}00388 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00389}00389 \textcolor{keywordflow}{case} 3:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00390}00390 d.push\_back(\textcolor{keyword}{new} Derived3(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00391}00391 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00392}00392 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00393}00393 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00394}00394 \textcolor{keywordtype}{unsigned} accum\{\};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00395}00395 meter.measure([\&] \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00396}00396 \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} x : d) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00397}00397 accum += (*x)();} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00398}00398 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00399}00399 \textcolor{keywordflow}{return} accum;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00400}00400 \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00401}00401 push\_checksum(accum, \textcolor{stringliteral}{"{}raw pointer"{}});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00402}00402 \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} x : d) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00403}00403 \textcolor{keyword}{delete} x;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00404}00404 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00405}00405 \};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00406}00406 BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}unique\_ptr"{}})} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00407}00407 (Catch::Benchmark::Chronometer meter) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00408}00408 std::vector> d;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00409}00409 \mbox{\hyperlink{structkblib_1_1_f_n_v__hash}{kblib::FNV32\_hash}} h;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00410}00410 \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} i : \mbox{\hyperlink{namespacekblib_a72690688922a2d4ae9a3e46ff0c1a9a9}{kblib::range}}(count)) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00411}00411 \textcolor{keyword}{auto} v = h(i);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00412}00412 \textcolor{keywordflow}{switch} (v \% 4) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00413}00413 \textcolor{keywordflow}{case} 0:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00414}00414 d.push\_back(std::make\_unique(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00415}00415 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00416}00416 \textcolor{keywordflow}{case} 1:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00417}00417 d.push\_back(std::make\_unique(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00418}00418 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00419}00419 \textcolor{keywordflow}{case} 2:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00420}00420 d.push\_back(std::make\_unique(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00421}00421 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00422}00422 \textcolor{keywordflow}{case} 3:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00423}00423 d.push\_back(std::make\_unique(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00424}00424 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00425}00425 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00426}00426 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00427}00427 \textcolor{keywordtype}{unsigned} accum\{\};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00428}00428 meter.measure([\&] \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00429}00429 \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00430}00430 accum += (*x)();} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00431}00431 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00432}00432 \textcolor{keywordflow}{return} accum;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00433}00433 \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00434}00434 push\_checksum(accum, \textcolor{stringliteral}{"{}unique pointer"{}});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00435}00435 \};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00436}00436 BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}poly\_obj"{}})(Catch::Benchmark::Chronometer meter) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00437}00437 std::vector d;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00438}00438 \mbox{\hyperlink{structkblib_1_1_f_n_v__hash}{kblib::FNV32\_hash}} h;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00439}00439 \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} i : \mbox{\hyperlink{namespacekblib_a72690688922a2d4ae9a3e46ff0c1a9a9}{kblib::range}}(count)) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00440}00440 \textcolor{keyword}{auto} v = h(i);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00441}00441 \textcolor{keywordflow}{switch} (v \% 4) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00442}00442 \textcolor{keywordflow}{case} 0:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00443}00443 d.push\_back(poly\_t::make(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00444}00444 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00445}00445 \textcolor{keywordflow}{case} 1:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00446}00446 d.push\_back(poly\_t::make(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00447}00447 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00448}00448 \textcolor{keywordflow}{case} 2:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00449}00449 d.push\_back(poly\_t::make(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00450}00450 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00451}00451 \textcolor{keywordflow}{case} 3:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00452}00452 d.push\_back(poly\_t::make(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00453}00453 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00454}00454 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00455}00455 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00456}00456 \textcolor{keywordtype}{unsigned} accum\{\};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00457}00457 meter.measure([\&] \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00458}00458 \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00459}00459 accum += x();} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00460}00460 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00461}00461 \textcolor{keywordflow}{return} accum;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00462}00462 \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00463}00463 push\_checksum(accum, \textcolor{stringliteral}{"{}poly\_obj"{}});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00464}00464 \};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00465}00465 BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}function pointer"{}})(Catch::Benchmark::Chronometer meter) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00466}00466 std::vector d;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00467}00467 \mbox{\hyperlink{structkblib_1_1_f_n_v__hash}{kblib::FNV32\_hash}} h;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00468}00468 \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} i : \mbox{\hyperlink{namespacekblib_a72690688922a2d4ae9a3e46ff0c1a9a9}{kblib::range}}(count)) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00469}00469 \textcolor{keyword}{auto} v = \textcolor{keyword}{static\_cast<}\textcolor{keywordtype}{unsigned}\textcolor{keyword}{>}(h(i));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00470}00470 d.push\_back(make\_fptr(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00471}00471 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00472}00472 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00473}00473 \textcolor{keywordtype}{unsigned} accum\{\};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00474}00474 meter.measure([\&] \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00475}00475 \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} x : d) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00476}00476 accum += x.p(\&x);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00477}00477 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00478}00478 \textcolor{keywordflow}{return} accum;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00479}00479 \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00480}00480 push\_checksum(accum, \textcolor{stringliteral}{"{}raw pointer"{}});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00481}00481 \};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00482}00482 BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}function pointer (wrapped)"{}})} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00483}00483 (Catch::Benchmark::Chronometer meter) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00484}00484 std::vector d;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00485}00485 \mbox{\hyperlink{structkblib_1_1_f_n_v__hash}{kblib::FNV32\_hash}} h;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00486}00486 \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} i : \mbox{\hyperlink{namespacekblib_a72690688922a2d4ae9a3e46ff0c1a9a9}{kblib::range}}(count)) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00487}00487 \textcolor{keyword}{auto} v = \textcolor{keyword}{static\_cast<}\textcolor{keywordtype}{unsigned}\textcolor{keyword}{>}(h(i));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00488}00488 d.push\_back(make\_fptr(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00489}00489 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00490}00490 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00491}00491 \textcolor{keywordtype}{unsigned} accum\{\};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00492}00492 meter.measure([\&] \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00493}00493 \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} x : d) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00494}00494 accum += x();} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00495}00495 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00496}00496 \textcolor{keywordflow}{return} accum;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00497}00497 \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00498}00498 push\_checksum(accum, \textcolor{stringliteral}{"{}raw pointer"{}});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00499}00499 \};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00500}00500 BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}std::function"{}})(Catch::Benchmark::Chronometer meter) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00501}00501 std::vector> d;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00502}00502 \mbox{\hyperlink{structkblib_1_1_f_n_v__hash}{kblib::FNV32\_hash}} h;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00503}00503 \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} i : \mbox{\hyperlink{namespacekblib_a72690688922a2d4ae9a3e46ff0c1a9a9}{kblib::range}}(count)) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00504}00504 \textcolor{keyword}{auto} v = \textcolor{keyword}{static\_cast<}\textcolor{keywordtype}{unsigned}\textcolor{keyword}{>}(h(i));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00505}00505 \textcolor{keywordflow}{switch} (v \% 4) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00506}00506 \textcolor{keywordflow}{case} 0:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00507}00507 d.emplace\_back(Derived0(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00508}00508 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00509}00509 \textcolor{keywordflow}{case} 1:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00510}00510 d.emplace\_back(Derived1(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00511}00511 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00512}00512 \textcolor{keywordflow}{case} 2:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00513}00513 d.emplace\_back(Derived2(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00514}00514 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00515}00515 \textcolor{keywordflow}{case} 3:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00516}00516 d.emplace\_back(Derived3(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00517}00517 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00518}00518 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00519}00519 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00520}00520 \textcolor{keywordtype}{unsigned} accum\{\};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00521}00521 meter.measure([\&] \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00522}00522 \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00523}00523 accum += x();} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00524}00524 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00525}00525 \textcolor{keywordflow}{return} accum;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00526}00526 \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00527}00527 push\_checksum(accum, \textcolor{stringliteral}{"{}std::function"{}});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00528}00528 \};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00529}00529 \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00530}00530 std::vector> d;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00531}00531 \mbox{\hyperlink{structkblib_1_1_f_n_v__hash}{kblib::FNV32\_hash}} h;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00532}00532 \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} i : \mbox{\hyperlink{namespacekblib_a72690688922a2d4ae9a3e46ff0c1a9a9}{kblib::range}}(count)) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00533}00533 \textcolor{keyword}{auto} v = \textcolor{keyword}{static\_cast<}\textcolor{keywordtype}{unsigned}\textcolor{keyword}{>}(h(i));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00534}00534 \textcolor{keywordflow}{switch} (v \% 4) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00535}00535 \textcolor{keywordflow}{case} 0:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00536}00536 d.emplace\_back(Derived0(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00537}00537 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00538}00538 \textcolor{keywordflow}{case} 1:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00539}00539 d.emplace\_back(Derived1(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00540}00540 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00541}00541 \textcolor{keywordflow}{case} 2:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00542}00542 d.emplace\_back(Derived2(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00543}00543 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00544}00544 \textcolor{keywordflow}{case} 3:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00545}00545 d.emplace\_back(Derived3(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00546}00546 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00547}00547 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00548}00548 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00549}00549 BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}std::visit(v, f)"{}})} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00550}00550 (Catch::Benchmark::Chronometer meter) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00551}00551 \textcolor{keywordtype}{unsigned} accum\{\};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00552}00552 meter.measure([\&] \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00553}00553 \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00554}00554 accum += \mbox{\hyperlink{namespacekblib_af1f6dd52b7ce14276ab5509700c6acf1}{std::visit}}([](\textcolor{keyword}{const} \textcolor{keyword}{auto}\& v) \{ \textcolor{keywordflow}{return} v(); \}, x);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00555}00555 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00556}00556 \textcolor{keywordflow}{return} accum;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00557}00557 \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00558}00558 push\_checksum(accum, \textcolor{stringliteral}{"{}std::visit(v, f)"{}});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00559}00559 \};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00560}00560 BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}kblib::visit(v, f...)"{}})} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00561}00561 (Catch::Benchmark::Chronometer meter) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00562}00562 \textcolor{keywordtype}{unsigned} accum\{\};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00563}00563 meter.measure([\&] \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00564}00564 \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00565}00565 accum += \mbox{\hyperlink{namespacekblib_af1f6dd52b7ce14276ab5509700c6acf1}{kblib::visit}}(x, [](\textcolor{keyword}{const} \textcolor{keyword}{auto}\& v) \{ \textcolor{keywordflow}{return} v(); \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00566}00566 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00567}00567 \textcolor{keywordflow}{return} accum;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00568}00568 \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00569}00569 push\_checksum(accum, \textcolor{stringliteral}{"{}kblib::visit(v, f...)"{}});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00570}00570 \};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00571}00571 BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}kblib::visit(v)(f...)"{}})} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00572}00572 (Catch::Benchmark::Chronometer meter) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00573}00573 \textcolor{keywordtype}{unsigned} accum\{\};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00574}00574 meter.measure([\&] \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00575}00575 \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00576}00576 accum += \mbox{\hyperlink{namespacekblib_af1f6dd52b7ce14276ab5509700c6acf1}{kblib::visit}}(x)([](\textcolor{keyword}{const} \textcolor{keyword}{auto}\& v) \{ \textcolor{keywordflow}{return} v(); \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00577}00577 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00578}00578 \textcolor{keywordflow}{return} accum;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00579}00579 \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00580}00580 push\_checksum(accum, \textcolor{stringliteral}{"{}kblib::visit(v)(f...)"{}});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00581}00581 \};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00582}00582 BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}visit\_indexed(v, f...)"{}})} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00583}00583 (Catch::Benchmark::Chronometer meter) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00584}00584 \textcolor{keywordtype}{unsigned} accum\{\};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00585}00585 meter.measure([\&] \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00586}00586 \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00587}00587 accum += \mbox{\hyperlink{namespacekblib_a7600c651ddd193dfeb5d294732ab1e69}{kblib::visit\_indexed}}(} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00588}00588 x, [](\textcolor{keyword}{auto}, \textcolor{keyword}{const} \textcolor{keyword}{auto}\& v) \{ \textcolor{keywordflow}{return} v(); \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00589}00589 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00590}00590 \textcolor{keywordflow}{return} accum;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00591}00591 \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00592}00592 push\_checksum(accum, \textcolor{stringliteral}{"{}visit\_indexed(v, f...)"{}});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00593}00593 \};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00594}00594 BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}kblib::visit2(v, f...)"{}})} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00595}00595 (Catch::Benchmark::Chronometer meter) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00596}00596 \textcolor{keywordtype}{unsigned} accum\{\};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00597}00597 meter.measure([\&] \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00598}00598 \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00599}00599 accum += \mbox{\hyperlink{namespacekblib_ac780c4d9780fb9b46be0669d377e1e9b}{kblib::visit2}}(x, [](\textcolor{keyword}{const} \textcolor{keyword}{auto}\& v) \{ \textcolor{keywordflow}{return} v(); \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00600}00600 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00601}00601 \textcolor{keywordflow}{return} accum;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00602}00602 \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00603}00603 push\_checksum(accum, \textcolor{stringliteral}{"{}kblib::visit2(v, f...)"{}});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00604}00604 \};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00605}00605 BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}kblib::visit2\_nop(v, f...)"{}})} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00606}00606 (Catch::Benchmark::Chronometer meter) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00607}00607 \textcolor{keywordtype}{unsigned} accum\{\};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00608}00608 meter.measure([\&] \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00609}00609 \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00610}00610 \mbox{\hyperlink{namespacekblib_a76752fc2ac3634b95ba226b1324dc0b9}{kblib::visit2\_nop}}(x, [\&](\textcolor{keyword}{const} \textcolor{keyword}{auto}\& v) \{ accum += v(); \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00611}00611 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00612}00612 \textcolor{keywordflow}{return} accum;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00613}00613 \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00614}00614 push\_checksum(accum, \textcolor{stringliteral}{"{}kblib::visit2\_nop(v, f...)"{}});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00615}00615 \};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00616}00616 BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}std::get\_if"{}})} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00617}00617 (Catch::Benchmark::Chronometer meter) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00618}00618 \textcolor{keywordtype}{unsigned} accum\{\};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00619}00619 meter.measure([\&] \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00620}00620 \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00621}00621 \textcolor{keywordflow}{if} (\textcolor{keyword}{auto}* \textcolor{keyword}{const} p = std::get\_if<0>(\&x)) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00622}00622 accum += (*p)();} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00623}00623 \} \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (\textcolor{keyword}{auto}* \textcolor{keyword}{const} p = std::get\_if<1>(\&x)) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00624}00624 accum += (*p)();} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00625}00625 \} \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (\textcolor{keyword}{auto}* \textcolor{keyword}{const} p = std::get\_if<2>(\&x)) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00626}00626 accum += (*p)();} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00627}00627 \} \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (\textcolor{keyword}{auto}* \textcolor{keyword}{const} p = std::get\_if<3>(\&x)) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00628}00628 accum += (*p)();} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00629}00629 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00630}00630 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00631}00631 \textcolor{keywordflow}{return} accum;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00632}00632 \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00633}00633 push\_checksum(accum, \textcolor{stringliteral}{"{}std::get\_if"{}});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00634}00634 \};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00635}00635 BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}switch (v.index())"{}})} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00636}00636 (Catch::Benchmark::Chronometer meter) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00637}00637 \textcolor{keywordtype}{unsigned} accum\{\};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00638}00638 meter.measure([\&] \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00639}00639 \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00640}00640 \textcolor{keywordflow}{switch} (x.index()) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00641}00641 \textcolor{keywordflow}{case} 0:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00642}00642 accum += std::get<0>(x)();} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00643}00643 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00644}00644 \textcolor{keywordflow}{case} 1:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00645}00645 accum += std::get<1>(x)();} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00646}00646 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00647}00647 \textcolor{keywordflow}{case} 2:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00648}00648 accum += std::get<2>(x)();} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00649}00649 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00650}00650 \textcolor{keywordflow}{case} 3:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00651}00651 accum += std::get<3>(x)();} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00652}00652 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00653}00653 \textcolor{keywordflow}{default}:;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00654}00654 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00655}00655 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00656}00656 \textcolor{keywordflow}{return} accum;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00657}00657 \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00658}00658 push\_checksum(accum, \textcolor{stringliteral}{"{}switch (v.index())"{}});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00659}00659 \};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00660}00660 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00661}00661 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00662}00662 \textcolor{comment}{// Test speed when some objects are invalid}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00663}00663 \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00664}00664 BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}raw pointer, ch"{}})} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00665}00665 (Catch::Benchmark::Chronometer meter) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00666}00666 std::vector d;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00667}00667 \mbox{\hyperlink{structkblib_1_1_f_n_v__hash}{kblib::FNV32\_hash}} h;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00668}00668 \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} i : \mbox{\hyperlink{namespacekblib_a72690688922a2d4ae9a3e46ff0c1a9a9}{kblib::range}}(count)) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00669}00669 \textcolor{keyword}{auto} v = \textcolor{keyword}{static\_cast<}\textcolor{keywordtype}{unsigned}\textcolor{keyword}{>}(h(i));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00670}00670 \textcolor{keywordflow}{switch} (v \% 5) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00671}00671 \textcolor{keywordflow}{case} 0:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00672}00672 d.emplace\_back(\textcolor{keyword}{new} Derived0(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00673}00673 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00674}00674 \textcolor{keywordflow}{case} 1:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00675}00675 d.emplace\_back(\textcolor{keyword}{new} Derived1(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00676}00676 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00677}00677 \textcolor{keywordflow}{case} 2:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00678}00678 d.emplace\_back(\textcolor{keyword}{new} Derived2(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00679}00679 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00680}00680 \textcolor{keywordflow}{case} 3:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00681}00681 d.emplace\_back(\textcolor{keyword}{new} Derived3(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00682}00682 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00683}00683 \textcolor{keywordflow}{case} 4:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00684}00684 \textcolor{keywordflow}{try} \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00685}00685 d.push\_back(\textcolor{keyword}{new} thrower(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00686}00686 \} \textcolor{keywordflow}{catch} (\textcolor{keywordtype}{int}) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00687}00687 d.push\_back(\textcolor{keyword}{nullptr});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00688}00688 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00689}00689 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00690}00690 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00691}00691 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00692}00692 \textcolor{keywordtype}{unsigned} accum\{\};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00693}00693 meter.measure([\&] \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00694}00694 \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} x : d) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00695}00695 \textcolor{keywordflow}{if} (x) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00696}00696 accum += (*x)();} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00697}00697 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00698}00698 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00699}00699 \textcolor{keywordflow}{return} accum;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00700}00700 \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00701}00701 \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} x : d) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00702}00702 \textcolor{keyword}{delete} x;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00703}00703 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00704}00704 \};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00705}00705 BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}unique\_ptr, ch"{}})} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00706}00706 (Catch::Benchmark::Chronometer meter) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00707}00707 std::vector> d;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00708}00708 \mbox{\hyperlink{structkblib_1_1_f_n_v__hash}{kblib::FNV32\_hash}} h;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00709}00709 \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} i : \mbox{\hyperlink{namespacekblib_a72690688922a2d4ae9a3e46ff0c1a9a9}{kblib::range}}(count)) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00710}00710 \textcolor{keyword}{auto} v = h(i);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00711}00711 \textcolor{keywordflow}{switch} (v \% 4) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00712}00712 \textcolor{keywordflow}{case} 0:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00713}00713 d.push\_back(std::make\_unique(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00714}00714 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00715}00715 \textcolor{keywordflow}{case} 1:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00716}00716 d.push\_back(std::make\_unique(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00717}00717 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00718}00718 \textcolor{keywordflow}{case} 2:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00719}00719 d.push\_back(std::make\_unique(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00720}00720 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00721}00721 \textcolor{keywordflow}{case} 3:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00722}00722 d.push\_back(std::make\_unique(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00723}00723 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00724}00724 \textcolor{keywordflow}{case} 4:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00725}00725 \textcolor{keywordflow}{try} \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00726}00726 d.push\_back(std::make\_unique(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00727}00727 \} \textcolor{keywordflow}{catch} (\textcolor{keywordtype}{int}) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00728}00728 d.push\_back(\textcolor{keyword}{nullptr});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00729}00729 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00730}00730 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00731}00731 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00732}00732 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00733}00733 \textcolor{keywordtype}{unsigned} accum\{\};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00734}00734 meter.measure([\&] \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00735}00735 \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00736}00736 \textcolor{keywordflow}{if} (x) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00737}00737 accum += (*x)();} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00738}00738 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00739}00739 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00740}00740 \textcolor{keywordflow}{return} accum;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00741}00741 \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00742}00742 \};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00743}00743 BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}poly\_obj, ch"{}})(Catch::Benchmark::Chronometer meter) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00744}00744 std::vector d;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00745}00745 \mbox{\hyperlink{structkblib_1_1_f_n_v__hash}{kblib::FNV32\_hash}} h;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00746}00746 \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} i : \mbox{\hyperlink{namespacekblib_a72690688922a2d4ae9a3e46ff0c1a9a9}{kblib::range}}(count)) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00747}00747 \textcolor{keyword}{auto} v = h(i);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00748}00748 \textcolor{keywordflow}{switch} (v \% 5) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00749}00749 \textcolor{keywordflow}{case} 0:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00750}00750 d.push\_back(poly\_t::make(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00751}00751 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00752}00752 \textcolor{keywordflow}{case} 1:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00753}00753 d.push\_back(poly\_t::make(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00754}00754 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00755}00755 \textcolor{keywordflow}{case} 2:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00756}00756 d.push\_back(poly\_t::make(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00757}00757 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00758}00758 \textcolor{keywordflow}{case} 3:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00759}00759 d.push\_back(poly\_t::make(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00760}00760 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00761}00761 \textcolor{keywordflow}{case} 4:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00762}00762 \textcolor{keywordflow}{try} \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00763}00763 d.push\_back(poly\_t::make(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00764}00764 \} \textcolor{keywordflow}{catch} (\textcolor{keywordtype}{int}) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00765}00765 d.emplace\_back(\textcolor{keyword}{nullptr});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00766}00766 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00767}00767 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00768}00768 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00769}00769 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00770}00770 \textcolor{keywordtype}{unsigned} accum\{\};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00771}00771 meter.measure([\&] \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00772}00772 \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00773}00773 \textcolor{keywordflow}{if} (x) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00774}00774 accum += x();} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00775}00775 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00776}00776 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00777}00777 \textcolor{keywordflow}{return} accum;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00778}00778 \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00779}00779 \};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00780}00780 std::vector> df;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00781}00781 std::vector>} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00782}00782 d;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00783}00783 \mbox{\hyperlink{structkblib_1_1_f_n_v__hash}{kblib::FNV32\_hash}} h;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00784}00784 \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} i : \mbox{\hyperlink{namespacekblib_a72690688922a2d4ae9a3e46ff0c1a9a9}{kblib::range}}(count)) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00785}00785 \textcolor{keyword}{auto} v = \textcolor{keyword}{static\_cast<}\textcolor{keywordtype}{unsigned}\textcolor{keyword}{>}(h(i));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00786}00786 \textcolor{keywordflow}{switch} (v \% 5) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00787}00787 \textcolor{keywordflow}{case} 0:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00788}00788 df.emplace\_back(Derived0(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00789}00789 d.emplace\_back(Derived0(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00790}00790 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00791}00791 \textcolor{keywordflow}{case} 1:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00792}00792 df.emplace\_back(Derived1(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00793}00793 d.emplace\_back(Derived1(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00794}00794 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00795}00795 \textcolor{keywordflow}{case} 2:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00796}00796 df.emplace\_back(Derived2(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00797}00797 d.emplace\_back(Derived2(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00798}00798 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00799}00799 \textcolor{keywordflow}{case} 3:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00800}00800 df.emplace\_back(Derived3(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00801}00801 d.emplace\_back(Derived3(v));} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00802}00802 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00803}00803 \textcolor{comment}{// Test speed of exception throwing and catching}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00804}00804 \textcolor{keywordflow}{case} 4:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00805}00805 \textcolor{keywordflow}{try} \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00806}00806 \textcolor{keyword}{auto}\& b = df.emplace\_back(thrower());} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00807}00807 b = thrower(v);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00808}00808 \} \textcolor{keywordflow}{catch} (\textcolor{keywordtype}{int}) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00809}00809 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00810}00810 \textcolor{comment}{// These have to be done in separate try blocks because otherwise}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00811}00811 \textcolor{comment}{// df would throw and d wouldn't get pushed}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00812}00812 \textcolor{keywordflow}{try} \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00813}00813 \textcolor{keyword}{auto}\& b = d.emplace\_back(std::in\_place\_type\_t\{\}, 0);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00814}00814 b = thrower(v);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00815}00815 \} \textcolor{keywordflow}{catch} (\textcolor{keywordtype}{int}) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00816}00816 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00817}00817 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00818}00818 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00819}00819 CHECK(d.size() == df.size());} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00820}00820 CHECK(df.size() == count);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00821}00821 CHECK(d.size() == count);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00822}00822 BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}std::function, ch"{}})} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00823}00823 (Catch::Benchmark::Chronometer meter) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00824}00824 \textcolor{keywordtype}{unsigned} accum\{\};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00825}00825 meter.measure([\&] \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00826}00826 \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : df) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00827}00827 \textcolor{keywordflow}{if} (x) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00828}00828 accum += x();} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00829}00829 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00830}00830 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00831}00831 \textcolor{keywordflow}{return} accum;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00832}00832 \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00833}00833 \};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00834}00834 BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}kblib::visit2\_nop(v, f...), ch"{}})} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00835}00835 (Catch::Benchmark::Chronometer meter) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00836}00836 \textcolor{keywordtype}{unsigned} accum\{\};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00837}00837 meter.measure([\&] \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00838}00838 \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00839}00839 \mbox{\hyperlink{namespacekblib_a76752fc2ac3634b95ba226b1324dc0b9}{kblib::visit2\_nop}}(x, [\&](\textcolor{keyword}{const} \textcolor{keyword}{auto}\& v) \{ accum += v(); \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00840}00840 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00841}00841 \textcolor{keywordflow}{return} accum;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00842}00842 \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00843}00843 \};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00844}00844 BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}std::get\_if, ch"{}})} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00845}00845 (Catch::Benchmark::Chronometer meter) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00846}00846 \textcolor{keywordtype}{unsigned} accum\{\};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00847}00847 meter.measure([\&] \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00848}00848 \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00849}00849 \textcolor{keywordflow}{if} (\textcolor{keyword}{auto}* \textcolor{keyword}{const} p = std::get\_if<0>(\&x)) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00850}00850 accum += (*p)();} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00851}00851 \} \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (\textcolor{keyword}{auto}* \textcolor{keyword}{const} p = std::get\_if<1>(\&x)) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00852}00852 accum += (*p)();} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00853}00853 \} \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (\textcolor{keyword}{auto}* \textcolor{keyword}{const} p = std::get\_if<2>(\&x)) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00854}00854 accum += (*p)();} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00855}00855 \} \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (\textcolor{keyword}{auto}* \textcolor{keyword}{const} p = std::get\_if<3>(\&x)) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00856}00856 accum += (*p)();} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00857}00857 \} \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (\textcolor{keyword}{auto}* \textcolor{keyword}{const} p = std::get\_if<4>(\&x)) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00858}00858 accum += (*p)();} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00859}00859 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00860}00860 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00861}00861 \textcolor{keywordflow}{return} accum;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00862}00862 \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00863}00863 \};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00864}00864 BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}switch (v.index()), ch"{}})} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00865}00865 (Catch::Benchmark::Chronometer meter) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00866}00866 \textcolor{keywordtype}{unsigned} accum\{\};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00867}00867 meter.measure([\&] \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00868}00868 \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00869}00869 \textcolor{keywordflow}{switch} (x.index()) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00870}00870 \textcolor{keywordflow}{case} 0:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00871}00871 accum += std::get<0>(x)();} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00872}00872 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00873}00873 \textcolor{keywordflow}{case} 1:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00874}00874 accum += std::get<1>(x)();} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00875}00875 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00876}00876 \textcolor{keywordflow}{case} 2:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00877}00877 accum += std::get<2>(x)();} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00878}00878 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00879}00879 \textcolor{keywordflow}{case} 3:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00880}00880 accum += std::get<3>(x)();} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00881}00881 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00882}00882 \textcolor{keywordflow}{case} 4:} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00883}00883 accum += std::get<4>(x)();} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00884}00884 \textcolor{keywordflow}{break};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00885}00885 \textcolor{keywordflow}{default}:;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00886}00886 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00887}00887 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00888}00888 \textcolor{keywordflow}{return} accum;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00889}00889 \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00890}00890 \};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00891}00891 BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}std::function, ex"{}})} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00892}00892 (Catch::Benchmark::Chronometer meter) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00893}00893 \textcolor{keywordtype}{unsigned} accum\{\};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00894}00894 meter.measure([\&] \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00895}00895 \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : df) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00896}00896 \textcolor{keywordflow}{try} \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00897}00897 accum += x();} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00898}00898 \} \textcolor{keywordflow}{catch} (\textcolor{keyword}{const} std::bad\_function\_call\&) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00899}00899 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00900}00900 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00901}00901 \textcolor{keywordflow}{return} accum;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00902}00902 \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00903}00903 \};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00904}00904 BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}std::visit(v, f), ex"{}})} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00905}00905 (Catch::Benchmark::Chronometer meter) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00906}00906 \textcolor{keywordtype}{unsigned} accum\{\};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00907}00907 meter.measure([\&] \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00908}00908 \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00909}00909 \textcolor{keywordflow}{try} \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00910}00910 accum += \mbox{\hyperlink{namespacekblib_af1f6dd52b7ce14276ab5509700c6acf1}{std::visit}}([](\textcolor{keyword}{const} \textcolor{keyword}{auto}\& v) \{ \textcolor{keywordflow}{return} v(); \}, x);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00911}00911 \} \textcolor{keywordflow}{catch} (\textcolor{keyword}{const} std::bad\_variant\_access\&) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00912}00912 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00913}00913 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00914}00914 \textcolor{keywordflow}{return} accum;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00915}00915 \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00916}00916 \};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00917}00917 BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}kblib::visit(v, f...), ex"{}})} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00918}00918 (Catch::Benchmark::Chronometer meter) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00919}00919 \textcolor{keywordtype}{unsigned} accum\{\};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00920}00920 meter.measure([\&] \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00921}00921 \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00922}00922 \textcolor{keywordflow}{try} \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00923}00923 accum += \mbox{\hyperlink{namespacekblib_af1f6dd52b7ce14276ab5509700c6acf1}{kblib::visit}}(x, [](\textcolor{keyword}{const} \textcolor{keyword}{auto}\& v) \{ \textcolor{keywordflow}{return} v(); \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00924}00924 \} \textcolor{keywordflow}{catch} (\textcolor{keyword}{const} std::bad\_variant\_access\&) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00925}00925 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00926}00926 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00927}00927 \textcolor{keywordflow}{return} accum;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00928}00928 \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00929}00929 \};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00930}00930 BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}kblib::visit(v)(f...), ex"{}})} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00931}00931 (Catch::Benchmark::Chronometer meter) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00932}00932 \textcolor{keywordtype}{unsigned} accum\{\};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00933}00933 meter.measure([\&] \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00934}00934 \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00935}00935 \textcolor{keywordflow}{try} \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00936}00936 accum += \mbox{\hyperlink{namespacekblib_af1f6dd52b7ce14276ab5509700c6acf1}{kblib::visit}}(x)([](\textcolor{keyword}{const} \textcolor{keyword}{auto}\& v) \{ \textcolor{keywordflow}{return} v(); \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00937}00937 \} \textcolor{keywordflow}{catch} (\textcolor{keyword}{const} std::bad\_variant\_access\&) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00938}00938 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00939}00939 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00940}00940 \textcolor{keywordflow}{return} accum;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00941}00941 \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00942}00942 \};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00943}00943 BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}visit\_indexed(v, f...), ex"{}})} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00944}00944 (Catch::Benchmark::Chronometer meter) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00945}00945 \textcolor{keywordtype}{unsigned} accum\{\};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00946}00946 meter.measure([\&] \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00947}00947 \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00948}00948 \textcolor{keywordflow}{try} \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00949}00949 accum += \mbox{\hyperlink{namespacekblib_a7600c651ddd193dfeb5d294732ab1e69}{kblib::visit\_indexed}}(} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00950}00950 x, [](\textcolor{keyword}{auto}, \textcolor{keyword}{const} \textcolor{keyword}{auto}\& v) \{ \textcolor{keywordflow}{return} v(); \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00951}00951 \} \textcolor{keywordflow}{catch} (\textcolor{keyword}{const} std::bad\_variant\_access\&) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00952}00952 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00953}00953 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00954}00954 \textcolor{keywordflow}{return} accum;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00955}00955 \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00956}00956 \};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00957}00957 BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}kblib::visit2(v, f...), ex"{}})} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00958}00958 (Catch::Benchmark::Chronometer meter) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00959}00959 \textcolor{keywordtype}{unsigned} accum\{\};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00960}00960 meter.measure([\&] \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00961}00961 \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00962}00962 \textcolor{keywordflow}{try} \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00963}00963 accum += \mbox{\hyperlink{namespacekblib_ac780c4d9780fb9b46be0669d377e1e9b}{kblib::visit2}}(x, [](\textcolor{keyword}{const} \textcolor{keyword}{auto}\& v) \{ \textcolor{keywordflow}{return} v(); \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00964}00964 \} \textcolor{keywordflow}{catch} (\textcolor{keyword}{const} std::bad\_variant\_access\&) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00965}00965 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00966}00966 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00967}00967 \textcolor{keywordflow}{return} accum;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00968}00968 \});} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00969}00969 \};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00970}00970 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00971}00971 \textcolor{keyword}{auto} end = std::chrono::steady\_clock::now();} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00972}00972 std::chrono::duration> time = end -\/ start;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00973}00973 std::cout << \textcolor{stringliteral}{"{}\(\backslash\)n\(\backslash\)nProfiling took "{}} << time.count() << \textcolor{stringliteral}{"{} seconds\(\backslash\)n"{}};} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00974}00974 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00975}00975 \textcolor{comment}{// All runs should produce identical results}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00976}00976 \textcolor{keywordtype}{unsigned} expected\_value = reproducibility\_test[0].first;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00977}00977 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00978}00978 std::cout << \textcolor{stringliteral}{"{}Checksum: "{}} << expected\_value;} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00979}00979 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00980}00980 \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} i : \mbox{\hyperlink{namespacekblib_a72690688922a2d4ae9a3e46ff0c1a9a9}{kblib::range}}(std::size\_t(1), reproducibility\_test.size())) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00981}00981 \textcolor{keyword}{const} \textcolor{keyword}{auto}\& run = reproducibility\_test[i];} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00982}00982 \textcolor{keywordflow}{if} (run.first != expected\_value) \{} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00983}00983 WARN(i << \textcolor{stringliteral}{"{}: "{}} << run.second << \textcolor{stringliteral}{"{}: "{}} << run.first} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00984}00984 << \textcolor{stringliteral}{"{} != "{}} << expected\_value);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00985}00985 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00986}00986 REQUIRE(run.first == expected\_value);} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00987}00987 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00988}00988 \}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00989}00989 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00990}00990 \textcolor{preprocessor}{\# endif }\textcolor{comment}{// not defined(FAST\_TEST)}} \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00991}00991 } \DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00992}00992 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// KBLIB\_USE\_CXX17}} \end{DoxyCode}