From f7972e751cca472f4e83c60f5c2a11ce3b82cf4e Mon Sep 17 00:00:00 2001 From: Gennadiy Rozental Date: Wed, 16 Sep 2015 08:27:53 -0400 Subject: [PATCH] work in progress --- doc/html/boostbook.css | 745 ------------------ doc/html/images/boost.test.logo.png | Bin 24740 -> 0 bytes doc/html/images/class-hier.jpg | Bin 9332 -> 0 bytes doc/html/images/general_architecture.svg | 199 ----- doc/html/images/level.png | Bin 244 -> 0 bytes doc/html/images/post_build_event.jpg | Bin 23140 -> 0 bytes doc/html/images/post_build_out.jpg | Bin 51685 -> 0 bytes doc/html/images/run_args.jpg | Bin 31817 -> 0 bytes include/boost/test/data/monomorphic/array.hpp | 30 +- .../test/data/monomorphic/collection.hpp | 42 +- .../boost/test/data/monomorphic/dataset.hpp | 45 +- include/boost/test/data/monomorphic/fwd.hpp | 8 +- .../boost/test/data/monomorphic/generate.hpp | 40 +- .../data/monomorphic/generators/random.hpp | 8 +- .../data/monomorphic/generators/xrange.hpp | 12 +- include/boost/test/data/monomorphic/grid.hpp | 115 +-- .../data/monomorphic/initializer_list.hpp | 34 +- include/boost/test/data/monomorphic/join.hpp | 102 +-- .../boost/test/data/monomorphic/singleton.hpp | 36 +- include/boost/test/data/monomorphic/zip.hpp | 106 +-- .../datasets-test/mono-grid-test.cpp | 5 +- .../datasets-test/random-test.cpp | 10 +- 22 files changed, 263 insertions(+), 1274 deletions(-) delete mode 100644 doc/html/boostbook.css delete mode 100644 doc/html/images/boost.test.logo.png delete mode 100644 doc/html/images/class-hier.jpg delete mode 100644 doc/html/images/general_architecture.svg delete mode 100644 doc/html/images/level.png delete mode 100644 doc/html/images/post_build_event.jpg delete mode 100644 doc/html/images/post_build_out.jpg delete mode 100644 doc/html/images/run_args.jpg diff --git a/doc/html/boostbook.css b/doc/html/boostbook.css deleted file mode 100644 index 86a6400e..00000000 --- a/doc/html/boostbook.css +++ /dev/null @@ -1,745 +0,0 @@ -/*============================================================================= -Copyright (c) 2004 Joel de Guzman -http://spirit.sourceforge.net/ - -Copyright 2013 Niall Douglas additions for colors and alignment. -Copyright 2013 Paul A. Bristow additions for more colors and alignments. - -Distributed under the Boost Software License, Version 1.0. (See accompany- -ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -=============================================================================*/ - -/*============================================================================= -Body defaults -=============================================================================*/ - - body - { - margin: 1em; - font-family: sans-serif; - } - -/*============================================================================= -Paragraphs -=============================================================================*/ - - p - { - text-align: left; - font-size: 10pt; - line-height: 1.15; - } - - .epigraph - { - text-align: right; - padding-left: 50%; - font-size: 110%; - font-family: Century Gothic; - font-style: italic; - font-weight: bold; - display: block; - } - -/*============================================================================= -Program listings -=============================================================================*/ - - /* Code on paragraphs */ - p tt.computeroutput - { - font-size: 9pt; - } - - pre.synopsis - { - font-size: 9pt; - margin: 1pc 4% 0pc 4%; - padding: 0.5pc 0.5pc 0.5pc 0.5pc; - } - - .programlisting, - .screen - { - font-size: 9pt; - display: block; - margin: 1pc 4% 0pc 4%; - padding: 0.5pc 0.5pc 0.5pc 0.5pc; - } - - /* Program listings in tables don't get borders */ - td .programlisting, - td .screen - { - margin: 0pc 0pc 0pc 0pc; - padding: 0pc 0pc 0pc 0pc; - } - -/*============================================================================= -Headings -=============================================================================*/ - - h1, h2, h3, h4, h5, h6 - { - text-align: left; - margin: 1em 0em 0.5em 0em; - font-weight: bold; - } - - h1 { font-size: 140%; } - h2 { font-weight: bold; font-size: 140%; } - h3 { font-weight: bold; font-size: 130%; } - h4 { font-weight: bold; font-size: 120%; } - h5 { font-weight: normal; font-style: italic; font-size: 100%; } - h6 { font-weight: normal; font-style: italic; font-size: 90%; } - - /* Top page titles */ - title, - h1.title, - h2.title - h3.title, - h4.title, - h5.title, - h6.title, - .refentrytitle - { - font-weight: bold; - margin-bottom: 1pc; - } - - h1.title { font-size: 140% } - h2.title { font-size: 140% } - h3.title { font-size: 130% } - h4.title { font-size: 120% } - h5.title { font-size: 110% } - h6.title { font-size: 100% } - - .section h1 - { - margin: 0em 0em 0.5em 0em; - font-size: 140%; - } - - .section h2 { font-size: 140% } - .section h3 { font-size: 130% } - .section h4 { font-size: 120% } - .section h5 { font-size: 100% } - .section h6 { font-size: 80% } - - /* Code on titles */ - h1 tt.computeroutput { font-size: 140% } - h2 tt.computeroutput { font-size: 140% } - h3 tt.computeroutput { font-size: 130% } - h4 tt.computeroutput { font-size: 130% } - h5 tt.computeroutput { font-size: 130% } - h6 tt.computeroutput { font-size: 130% } - - -/*============================================================================= -Author -=============================================================================*/ - - h3.author - { - font-size: 100% - } - -/*============================================================================= -Lists -=============================================================================*/ - - li - { - font-size: 10pt; - line-height: 1.3; - } - - /* Unordered lists */ - ul - { - text-align: left; - } - - /* Ordered lists */ - ol - { - text-align: left; - } - -/*============================================================================= -Links -=============================================================================*/ - - a - { - text-decoration: none; /* no underline */ - } - - a:hover - { - text-decoration: underline; - } - -/*============================================================================= -Spirit style navigation -=============================================================================*/ - - .spirit-nav - { - text-align: right; - } - - .spirit-nav a - { - color: white; - padding-left: 0.5em; - } - - .spirit-nav img - { - border-width: 0px; - } - -/*============================================================================= -Copyright footer -=============================================================================*/ - .copyright-footer - { - text-align: right; - font-size: 70%; - } - - .copyright-footer p - { - text-align: right; - font-size: 80%; - } - -/*============================================================================= -Table of contents -=============================================================================*/ - - div.toc - { - margin: 1pc 4% 0pc 4%; - padding: 0.1pc 1pc 0.1pc 1pc; - font-size: 80%; - line-height: 1.15; - } - - .boost-toc - { - float: right; - padding: 0.5pc; - } - - /* Code on toc */ - .toc .computeroutput { font-size: 120% } - - /* No margin on nested menus */ - - .toc dl dl { margin: 0; } - -/*============================================================================= -Tables -=============================================================================*/ - - .table-title, - div.table p.title - { - margin-left: 4%; - padding-right: 0.5em; - padding-left: 0.5em; - } - - .informaltable table, - .table table - { - width: 92%; - margin-left: 4%; - margin-right: 4%; - } - - div.informaltable table, - div.table table - { - padding: 4px; - } - - /* Table Cells */ - div.informaltable table tr td, - div.table table tr td - { - padding: 0.5em; - text-align: left; - font-size: 9pt; - } - - div.informaltable table tr th, - div.table table tr th - { - padding: 0.5em 0.5em 0.5em 0.5em; - border: 1pt solid white; - font-size: 80%; - } - - table.simplelist - { - width: auto !important; - margin: 0em !important; - padding: 0em !important; - border: none !important; - } - table.simplelist td - { - margin: 0em !important; - padding: 0em !important; - text-align: left !important; - font-size: 9pt !important; - border: none !important; - } - -/*============================================================================= -Blurbs -=============================================================================*/ - - div.note, - div.tip, - div.important, - div.caution, - div.warning, - p.blurb - { - font-size: 9pt; /* A little bit smaller than the main text */ - line-height: 1.2; - display: block; - margin: 1pc 4% 0pc 4%; - padding: 0.5pc 0.5pc 0.5pc 0.5pc; - } - - p.blurb img - { - padding: 1pt; - } - -/*============================================================================= -Variable Lists -=============================================================================*/ - - div.variablelist - { - margin: 1em 0; - } - - /* Make the terms in definition lists bold */ - div.variablelist dl dt, - span.term - { - font-weight: bold; - font-size: 10pt; - } - - div.variablelist table tbody tr td - { - text-align: left; - vertical-align: top; - padding: 0em 2em 0em 0em; - font-size: 10pt; - margin: 0em 0em 0.5em 0em; - line-height: 1; - } - - div.variablelist dl dt - { - margin-bottom: 0.2em; - } - - div.variablelist dl dd - { - margin: 0em 0em 0.5em 2em; - font-size: 10pt; - } - - div.variablelist table tbody tr td p, - div.variablelist dl dd p - { - margin: 0em 0em 0.5em 0em; - line-height: 1; - } - -/*============================================================================= -Misc -=============================================================================*/ - - /* Title of books and articles in bibliographies */ - span.title - { - font-style: italic; - } - - span.underline - { - text-decoration: underline; - } - - span.strikethrough - { - text-decoration: line-through; - } - - /* Copyright, Legal Notice */ - div div.legalnotice p - { - text-align: left - } - -/*============================================================================= -Colors -=============================================================================*/ - - @media screen - { - body { - background-color: #FFFFFF; - color: #000000; - } - - /* Syntax Highlighting */ - .keyword { color: #0000AA; } - .identifier { color: #000000; } - .special { color: #707070; } - .preprocessor { color: #402080; } - .char { color: teal; } - .comment { color: #800000; } - .string { color: teal; } - .number { color: teal; } - .white_bkd { background-color: #FFFFFF; } - .dk_grey_bkd { background-color: #999999; } - - /* Links */ - a, a .keyword, a .identifier, a .special, a .preprocessor - a .char, a .comment, a .string, a .number - { - color: #0082BF; - } - - a:visited, a:visited .keyword, a:visited .identifier, - a:visited .special, a:visited .preprocessor, a:visited .char, - a:visited .comment, a:visited .string, a:visited .number - { - color: #2DBBFF; - } - - h1 a, h2 a, h3 a, h4 a, h5 a, h6 a, - h1 a:hover, h2 a:hover, h3 a:hover, h4 a:hover, h5 a:hover, h6 a:hover, - h1 a:visited, h2 a:visited, h3 a:visited, h4 a:visited, h5 a:visited, h6 a:visited - { - text-decoration: none; /* no underline */ - color: #000000; - } - - /* Copyright, Legal Notice */ - .copyright - { - color: #666666; - font-size: small; - } - - div div.legalnotice p - { - color: #666666; - } - - /* Program listing */ - pre.synopsis - { - border: 1px solid #DCDCDC; - box-shadow: 4px 4px 2px #9D9D9D; - background-color: #EEEEF3; - } - - .programlisting, - .screen - { - border: 1px solid #DCDCDC; - background-color: #EEEEF3; - } - - td .programlisting, - td .screen - { - border: 0px solid #DCDCDC; - } - - /* Blurbs */ - div.note, - div.tip, - div.important, - div.caution, - div.warning, - p.blurb - { - border: 1px solid #DCDCDC; - } - div.sidebar - { - border: 1px solid #DCDCDC; - box-shadow: 5px 5px 2px #9D9D9D; - background-color: #EEEEF3; - } - - /* Table of contents */ - div.toc, - div.toc-main - { - border: 1px solid #DCDCDC; - box-shadow: 5px 5px 2px #9D9D9D; - background-color: #EEEEF3; - margin-bottom: 10px; - } - - div.toc a:visited - { - color: #0082BF; - } - - /* Tables */ - div.informaltable table tr td, - div.table table tr td - { - border: 1px solid #DCDCDC; - background-color: #EEEEF3; - } - - div.informaltable table tr th, - div.table table tr th - { - background-color: #E3F9E4; - border: 1px solid #DCDCDC; - } - - .copyright-footer - { - color: #8F8F8F; - } - - /* Misc */ - span.highlight - { - color: #00A000; - } - } - - @media print - { - /* Links */ - a - { - color: black; - } - - a:visited - { - color: black; - } - - .spirit-nav - { - display: none; - } - - /* Program listing */ - pre.synopsis - { - border: 1px solid gray; - background-color: #EEEEF3; - } - - .programlisting, - .screen - { - border: 1px solid gray; - background-color: #EEEEF3; - } - - td .programlisting, - td .screen - { - border: 0px solid #DCDCDC; - } - - /* Table of contents */ - div.toc - { - border: 1px solid #DCDCDC; - box-shadow: 5px 5px 2px #9D9D9D; - background-color: #EEEEF3; - } - - /* Table of contents */ - div.toc-main - { - border: 1px solid #DCDCDC; - box-shadow: 5px 5px 2px #9D9D9D; - background-color: #EEEEF3; - } - - .informaltable table, - .table table - { - border: 1px solid #DCDCDC; - box-shadow: 4px 4px 2px #9D9D9D; - border-collapse: collapse; - background-color: #EEEEF3; - } - - /* Tables */ - div.informaltable table tr td, - div.table table tr td - { - border: 1px solid #DCDCDC; - background-color: #EEEEF3; - } - - div.informaltable table tr th, - div.table table tr th - { - border: 1px solid #DCDCDC; - background-color: #EEEEF3; - } - - table.simplelist tr td - { - border: none !important; - } - - /* Misc */ - span.highlight - { - font-weight: bold; - } - } - -/*============================================================================= -Images -=============================================================================*/ - - span.inlinemediaobject img - { - vertical-align: middle; - } - -/*============================================================================== -Super and Subscript: style so that line spacing isn't effected, see -http://www.adobe.com/cfusion/communityengine/index.cfm?event=showdetails&productId=1&postId=5341 -==============================================================================*/ - -sup, -sub { -height: 0; -line-height: 1; -vertical-align: baseline; -position: relative; - -} - -/* For internet explorer: */ - -* html sup, -* html sub { -vertical-align: bottom; -} - -sup { -bottom: 1ex; -} - -sub { -top: .5ex; -} - -/*============================================================================== -Indexes: pretty much the same as the TOC. -==============================================================================*/ - - .index - { - font-size: 80%; - padding-top: 0px; - padding-bottom: 0px; - margin-top: 0px; - margin-bottom: 0px; - margin-left: 0px; - } - - .index ul - { - padding-left: 3em; - } - - .index p - { - padding: 2px; - margin: 2px; - } - - .index-entry-level-0 - { - font-weight: bold; - } - - .index em - { - font-weight: bold; - } - - -/*============================================================================== -Alignment and coloring use 'role' feature, available from Quickbook 1.6 up. -Added from Niall Douglas for role color and alignment. -http://article.gmane.org/gmane.comp.lib.boost.devel/243318 -*/ - -/* Add text alignment (see http://www.w3schools.com/cssref/pr_text_text-align.asp) */ -span.aligncenter -{ - display: inline-block; width: 100%; text-align: center; -} -span.alignright -{ - display: inline-block; width: 100%; text-align: right; -} -/* alignleft is the default. */ -span.alignleft -{ - display: inline-block; width: 100%; text-align: left; -} - -/* alignjustify stretches the word spacing so that each line has equal width -within a chosen fraction of page width (here arbitrarily 20%). -*Not* useful inside table items as the column width remains the total string width. -Nor very useful, except to temporarily restrict the width. -*/ -span.alignjustify -{ - display: inline-block; width: 20%; text-align: justify; -} - -/* Text colors. -Names at http://www.w3.org/TR/2002/WD-css3-color-20020219/ 4.3. X11 color keywords. -Quickbook Usage: [role red Some red text] - -*/ -span.red { inline-block; color: red; } -span.green { color: green; } -span.lime { color: #00FF00; } -span.blue { color: blue; } -span.navy { color: navy; } -span.yellow { color: yellow; } -span.magenta { color: magenta; } -span.indigo { color: #4B0082; } -span.cyan { color: cyan; } -span.purple { color: purple; } -span.gold { color: gold; } -span.silver { color: silver; } /* lighter gray */ -span.gray { color: #808080; } /* light gray */ diff --git a/doc/html/images/boost.test.logo.png b/doc/html/images/boost.test.logo.png deleted file mode 100644 index 89467d97048280b97e67319083da10cf4e763be5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24740 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 SZ6N~#1B0ilpUXO@geCw?jqSPs diff --git a/doc/html/images/class-hier.jpg b/doc/html/images/class-hier.jpg deleted file mode 100644 index f5cccfc6b997c4d262aa52861e48296c96876996..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9332 zcmex=oIr{vTivYZ;lC8CV2ag%k}P*@OcV*_8@Kj2b5{E zCr+Nabot8FYu9hwy!G(W<0ns_J%91?)yGetzkL1n{m0K=Ab&A3FoS&sA|M_^^Oqn4 z6C)D~3o{El$X|?1r)BN`8Jb?y|CnX}kmW=BU#?m5|F{?aXLyv|^HKMSok_Fv@6aVl_ilc9 zz5BG}hKG9Ud-?<=A3xJrSuVYr!RWBU#7}Qu?lZXZZmZ;5p)^=HIq<_HJF?6w>WK@8&(jbd}kvU7qG{cPtq<@g)`>I2?XuPv)Z= zIbZh%9d>MrH9P%w#U#H#LA!G)!HR{Nl|~ok@BZ}szHvYI&IYS`LLPOxYTCTq|J%to zVZVHj$*YNHJUH<)bkl*;Tb}FK>^=M=Y)7yC5j)lPLvj3DHg*4Y58i)i-%Z_vttr-m zN%BS~3*{nyo}T{MQp@lD?57Mb|1+QlV+Oj9*L=D5$Fp$Ft(&KL`}!`s*k642U{cYU z1U)amo{gJzb_R>{1gRG|C`-w)&ieHDfSvq~{X2jAUfES6WOGCyx`@dgJOt z51eCQOa0z%qAPx6p4g5{TVkyarC(Xn`(*1@kD1fol&fcIF)Ay_RCB%6p8t{mPrHr! ze}=?J`!8Luc5yLiEb5{ve*VYyKZD|VvHBZf_J5VOuKv~5ow_P6A~sg%SvIH7wP)5d zmARfItA;k@ampLm81wZMJ0HIPN#+441T{?l0i6p3jj{9`@b9bjgI{#Z{)9 zt!s~L$lt+OsA#xp&QsC7<_!0%XRZ6k^5OID&C#(_vMY04>~D$71vzWIt+-_STabg9 zYXRfd!rsNQs^R-*J-Y9=bJn@*Z_5LZoafy?L-}(IQ>eL|xH_}?vJ7TDe~ygeNasx3 zC6irckKZabJ+khTN5CYBH*=N_wgR~or- zKd)BOZgtDqkQTtrUf{`h^YrCC&TCFqF4g&7m3u_IYRQTNIJG;hyW_*RG}#N~KeyZaqy(lzMk2af)_&b-2O+^zNsa9)xG*{x^Jd- z?4A4R&)=pn_NPD0l{y@3{%u=b$bHR_$oP{zYmyXBij^sITv2-(Q1&F9<=L^`MVa^H zFHbt`v;C9qbqUs+Hy*G`rm6OchPwH4tzu_jTP|^O+d7kiph7D`x|8gyjWi9@v z_@80I^OpY%Z?x6_O^gk9bYK+;q$-yA&(OaAiRGj7zqyY8XIK)pb$`V4I+06x`FZQ_ zew9$&k*Mj6cGehHdde@iUMA+1P)ie3IvXh8mrt z`@I<6W$pdjyKnjOm>Y5K&!XZG?e3eO z|NQT|{w3(|EVFUHtB&>Bm33KeXXz(|zyXHbt(5+(+{Zbpki}|Jx!G z##MaacU$Ht12PI9J3*;fMR{xQ!>N+@18! zuY6m%cEf*$*3y;H^~bk&n|e1`$KQ`Lmj59VF4$22z`j-fLvPl#`>)sNy}SPV+CH8A z?)D$p6YM|!VtD^z9rK%ACGsEtGc5UW@A8#(D=Ula`IXA;m)a>ms8orVetwxwf`ri>;JFiZt=hW43YJpT-BTFpKuocXGo0o{?Fi@ww5i^-f)&7@o>G|J( zQ~xuZ6#37`?c?$?{4EXKbfh~ zR=B0NFEE99-hSr-vSfCmyfKGw`qp+gtpt{!_r#`M+5s z>R;U6^+JPTQ5P69Gvy2Wm}KWPxa7lcl$!kM#Gc18SBhTm zYPq701;t-ecCde4Rw=c_ z{^P@?Kki+=AnSDOLH(1;dt2VxJY0`;do zOs&Jz|1rfR|NCWn?M{63E&oiOPdSs`1@kaxTHjIjaF?|UNj|@Poz_u|q_P+-8RuU$ zxw6oFW2Dz6$8sZIm4Y2CTMBnAwhNiSc&~-2xJ`zMgF$lshlyGBU({aD|NiUre}+jK z{~21kga0!uG>`euu>V^8pNY|5`zs%@Y`hY7FW2rz)Xe0@_uDjDRVS=k^k75TX)E4S zYZh$dl#b3|kw-O1b5g~sM>iLk-;=ne^I%%V+CM+zu1=Nm6f-&Dd2{2=DFysdFILb0 zIQ>tf?*2F0%lI?bFJIM0&Y5 z^qG|@@O)Usnf!)PeQU8)>H4mcjCHxXTh2;7W81rHM_;6=Wm3|nbDtVQqBpRx9}m8? zu6F$~`7g{D{xf_iHvi9{bb;MocIwmT2Wyp%D(>4p%i3Ea@6m6=$Y~b$3=8%Jue|?B zr#Uf<&w{a;q2PUqwCKgPZ*sq!O%K^J^<5OVt-I&Vd_`@cw;`R$zon<$5lVOEiYixV z=c$%{TOWT}xb|;HK0L^OTxleE{`4H#ryC;jp6Tzg+I90| zjzLCHZ0w!L_=B=nzfN{EpOwO9Vq|%ZA3y?%%wWA!Sm$#jYmxYiHSs1rM7h<`jiYod3N&is5PLP1oz4 z`lj0T{I5H+O?KHFdZufa`uQIBN}krofzQm8&foX{nYMh7YxBb8f0XCn^js33`71?E zVfVEE3~z2_?U<%kJzqPASNi8E`-_#IZaUm>{CiXL4qCup{I*}B{sO=Ae};o+?*Hj_ zkO(}qE60v&TN`g$hSHU16Ks#pHa;%wT+kKc(wOLTS|U`@Y$e00Hwk;6CJ-=*b^f0z zy6OK8hROdjd$)`0`Il_j_)PngMf^+9Czx5~aKZAoU|9=K{%0gJBlK^RK7bHtx8p z`}U7zdAZ3wrHxnDwk};Xm4kP~q(H?(+S5Fz^d8)obc99cYW!ibfao9XE_)(WIxp$1p#sdUp5fwax$7w)M>a@s+{-!+U3`)FZ_{w@zNQJ0cwX+jUNXL!MD< z=LDDDqTkJLCzmW{J()j8?D9vxHF`D9iHptVt~!~`dw0+0lVbCYj~l;dGZkXJC1!rp zc;CZDi5R=*T(|kfvt})Rv!VOYbp1Iw?ML*^@GoS#t#EBVT6{3%U$=j(|C1@Y{zka( ze}+ppGV88C=Ksa`qW*{F?EefCv*s<%el#~tJKKA%vD>!B{M-!b? zLT4H516h|OHCXTNo}rs$bjMf5uy4IGtNhG0VISAGn~OAuc6~f}(3>@T8T(~HHp_2o ztm}F2MW0fOXQ_yMF8}FPZjfine};Xxu55oD?OpolNx;elFT55cFs|`p_|I@MiXr}o z=Q{QO4E_APugw|0R4RFw{;9bh_MhQ+#&7>_z51&!clmbB>$Sao?tYh+#(#$6uVUpR zuH=l!~_J|Lp$wK54#^ zdClF=E!SjVo@w`eqe3efh1s zF);^i51NPPGASLosQEOx$kV9r@WN*eY8yYCYhJd0X6oXI=#z71DsOjq@@v{L&$Us{ z(WC2kdiQ^Z7p$O>k!Sh;To>>)ZQi=paI3cIZ<{9R*X6=dK5i~W4DNQT9JLPbNdCG? zKIdcoUxqEPBA|Bj(fu(UzDVHTkz}V3*T7;4~kap zc&~m;;B|Y@_KRCwgpWVHbI7#PV?zIqpT7+bGAr9W5wPaT_=|2LyQ6FIe+B~9Vo|h} z_1exyx+c+QSG<@Nbn9d(>*lTdR;u*v%ULO)=)0@A>A~NJ$1<3gLt1x4q;v<_Skd$7 zuDkf{y!d~H3*7MPM3$8ZMbhTmxBaS}v%Nfs<6%$gY?j{)3{NH%Fvv`D5S_g&GA8Ek ze}{ENbeYtl>O!)%i1f#-d?Z?DttqCu;GV8byUCg@k>QgS2=SITc zl6O3K=*DJgGs$opi!tg?*6;t%AiGq~^usTi*m!B?mn#mcuD6d2 zb&a^bHG8kY%L_Md9xg4dFUegT`Hn|pN0+Ckj^KHZj^BGdRxSH{^hv^tC_(velGFb) zOw3@;y7cSPKYg=vuedw@GwkPSJpN3p>fyRS_O-S8a|<8zbD7-#d?PDJr}@R9EArPC z{AXyXKWgxw;dqN?N_Eah+am{R#j?W#zZ}zGzM!#=&7w{-`UFeSkGzWAf44nyEB=j>)K;9Jy1L{=n9%~R9Z>Z4M26RTIn zW>{HA-#n;#WRY%C(9=L~*#);5{MaRxU&qEW6yIa{&oHU_;ridKQU4iUEL|M?(euK) z7I&ws`O0<HfEjt@mXG3Ree)R`M1}nxQia2rCaiK-`}5xm65HBrvGrcZ+Fg8 zy6ufAH?PpW$494KxR>$$Rk@30jnRsvO?e1q#d?Qmwx{fIrMT@+}!fzS%EK}-4jXqZ9IFv z`m_KKt(r^sjdN9+?legptj}D$uU9E!pTs0y+jYvnoz5@u(>=(oelExD_?+gAp4>fq za;JSNXpn1ntz^D!w)kPJ-J$R9`>v?;#X4!c$ur6Bc$*Sz@M)rR!mW+H6O*P)+Ne1} z&Ru$Xl*If;vPZwZ&bH6~ox{I;cC^J!)?LTN9^^$SCHX$ez1SJBLAO=Se-88Jeb;oq z{Pp+VFjYNst7e==q>`%0l3c|*cg0&QWc?Exj%0+JKZ^9q-Y3Fz?_I#I*}J!xUGmzv za@#C}*r^_lyFw&$O4S#rluTi4O#jcI${h)cvi5(yyVo`C{B8eJBkKI$rZx6oa_^Ri zFofGzf|R&{l>BG-*SiIz=KN2MDD%Hf>;E%+$z95jegAH4yWh?|ziqzDx%lc&&YS&Y za)x@AewoDq*|Ui+_vua!xH{WEpD)|&n00fm$)ye{ief99eg@q9U(%b&l!m2OiPsJ1m5-{}`TxzcorVb-c$K{MtR>qPH4Fmds{bq{`b zWEu<3es-o|+p+#7w_o1+&(Qi__|QFXZtov~Yu9vjbl-6~t$6p}!bqt~mYf3%%6n4x z1u?$(5-z^}<}J@hGt;hqsov|xzNyjVywc658S9wOq!^yq6TOp{{XMsvU8wawr*P%m zqw9}YOD|mJne%?-S=q}6m&BaZK6LTa#x2_yOsVLWh(3Kl@G0Z*DH+U{URgei&aO-^ zRP?y8o8xhM62p0}1=H*f2vvtqi_AE0-&&f#F?0I0{|uSGId<-;W^4NNNOg9}OB16! z;WHbj>nj9pmgH*9-CnW$VdK06 zz6Ty`%cid7^?LN^Qa1NqyH9t8+_&vAoc8I?26r~|(t{e0CC{HKVo;b>XY`+8g6j6a zttI#W>b9-?;q~X$uVrgj`X;W7y5l#2ReV~JgHlWWO%6Tr>eZEfN0=CAXry!T#$f9+ zhufkS1uwGaeNg{1`95#`4Xx|{8C-Q4q~3S=wU;PaiLI`b{KS4scbcHw&!wLx8mn|q zyW8_XhAqg0ZL7)dZ&%icJ$;k+CT92I=)0@dbcLS!yk&yp?Fo(wO&qTy{+UlXx-eRF z`|dga88UC|jE>G!Pgq$j)91Bl5<^Jx`~<5BeDVDzQ?7iK)p#YJ_wPiXcE3r~%h$EP zKP7$I%tpDoFa4H8wq@mR^Nz^epOYv_3xZ{scWxzo9J)pJ#j$P!ltLm>N;cM zqUbvnn{G*;mHQo#krc6PcH|aa9gkclLve>0OMBjFTMGWy-~VW~UM|^d z_1^Ew;)`eZXq^0(Zf@tVvtUBV&!zj)Zh5lqWHDrTud&`{|CWpQ-6opE^LVn&yDs>5 zVfrO?u?MY_pPMNspL4vir1e;w+389PAM(w@xfe ze5%xTaBH%((os#-q+kV`J_g&mjbG;rsCDo2EcyL%ZDPmy(o!z{>A3>uBD)QA8`gLo zlWmacpIKf+Y%w!G{>!((5c!|sq|>$fH=>FE85ZZguG^sVpW(^EZ2NCq8~!s~++M*VsGuKQVu3|C?+7zlpJ7e;JC(=9y1=_su%^VZ4CTn`xiyXUj;oS>9P> zy<*A^$*?Z9VU3k?lBL;IZ8 z9I(5?GjZY$CdO-lagpoY3$xeUigRCl_x5?#qn)18zB{kzN8K@r%hP+D9?=kQDy2VT z-}RjN)@lbY>*eX!1e;A>7TX)-t?R^L%K3KQrKhUte{WTuIhgLI#gn(=(asgl&9(jk6W2$|K3c`6wliJQ8Z(QnFUL-B@es#Ltj2_TkD8!hh0~5 z?Jf!}3BH$E7t8{GA?~tpe+|fJVQ+ z#={;@CZ*aQcZ{AA=)juzTFP#5>6(aFv*H$JXWDMv^X<*{uwJWOr!E>=L<%(VIPZLw zv8X{A%^Qo~)an0cSnv)s<(;|zr&gB+!+@w*^}R~IY zb~0PYHFaq)J-_iM{y&4`UH<tkW0vl5?fVu%U4?a(VQ<5!1&D`)V(VQb?;2>|C#DOKq^>mqa8o` oZCrdmv)t-m--fv8lljW-i%&^tuMBcDS4n5Ta6Qshgz^7P0Ffu0 - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - program execution monitor - execution monitor - test suites - test cases - assertions - report - log - - fixture - - diff --git a/doc/html/images/level.png b/doc/html/images/level.png deleted file mode 100644 index 7c34099b739f88dd34286c85742abeecc8ad21f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 244 zcmeAS@N?(olHy`uVBq!ia0vp@3=9my983%h3`ar*4lpnk04(LhAK4%hK3dfhF=T}3=J3t6wnNAP!DTBIKI_Hra|zJ&kTvvL_=-czbw#s=Yq5q6OTd+ffnDqPrUz|0qkO9N vhx5cKAC$H1JUZeRUE=0^*+1h84})pzky(NF&N?$NFfe$!`njxgN@xNAjeSgd diff --git a/doc/html/images/post_build_event.jpg b/doc/html/images/post_build_event.jpg deleted file mode 100644 index ac9cdf9aa870644482f7ae00ab28c26bc17f6302..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23140 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 diff --git a/doc/html/images/run_args.jpg b/doc/html/images/run_args.jpg deleted file mode 100644 index be0ab288562f78eb559199e48ecbe3cdeadfcb40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31817 zcmex=pPQGDpO2SYNJv;%NJt6<Wg}zL(6GcQi#A>|b4p4s zEM53WT&1zu#JRX+Q`6KdYFiGPyQFOW@c#&d6eAQMY-MC(W@Tafe}q9rkdcvrnSqIk ziHRBNEI~#lAr?huRzpXTM5Bodh5z4T;9+KDU=m~&WUy!WmHEyveM512^zp*!ssg88 zW-Un&IMJ8kbhbCkbcfP9IdQJ*S9=8)o34KGb^BG-?1|H=!}-3i-M3P!!0>F=FWcO& zo_@?wNlVRHSHD!-<$-MPZR^IbRgI(e^+(qR1y7m@)p^nfX6l-Wx!oI0s&4H+ z;OPgmGtSKtqE4$Q7-oZ4+SXdRZNHYRJ^^JcSA-frrw!&XNr*1Zfm5>i6wHSM=LS6C zp|E7jR?*Xozugfuj2D^bHL>7XtJOurMIl>W{P0xla%fobwrHc-iK^8M(X=aH(n6Q+j}qfla&oTV554fzqlUMi9Gg;8c5?YFKkK}1*0(&L&TT(FRn7BCV$C9{sACFJ zPBIxS%)+9lu4}F1oT_AvdrlN>b z;=_eN*QQBH-hAc9Bo0ODOSZh@xzD*rH`hvPUF>B&fob3Nsmsw%mfv>hnuI4fuAc2Kly@g;F>Bhypv2@4O)++Tat zuj8V*PyTl4xCsY8^3_+DbcgP^@y(;-cc6@b<*WYs z`W*x%X71@ccwmaiS`NMmM=m&KmIO)^Jjl3vv*Y&AIC=6-Vf?d2;jq$EGrJr?Zrz~$&~S=qj8)(`8KS}9LUFR}h&dA-fZ zB)jj?$T*2%4m+q?0;Wn0-Ah2Eg(XH=E$~@-H zMOJPl5-Or>F2zMpujyJTOnOX_hUh%8~ z<^2~g%Dr@o<6rcP*XW~Ytlrb==H0p%MV;3s9#nk6a_*b@!NU*jc`_{4m%mlHkj+wY z>G+y?*SvPDP}AEebbr^ZgGVzzEA4rdX(82jb9+;Br1g^f*Y{6Sa_ZHx-KwUxB4gE} z3Kav#vd#AW?uPHQKW#O7*lMM`p{lq#E2>j}@8f2r%%oY~Ml!7~2FJuVFieQ)c$*gf zwD^-XPg&?oOeUi$n>SwC;l^-&1J8Ye|CAnd*wg3N@SnZ z&-QEH)Bid10@ww7pX|>rcf9BRbIS|z)Lwm)lx_T#DKO~442;v=j{~W>U=bhUA=WzaZQx@-|SPD|JjE>|9x!Fe}>s-^{tL~oVXZu?Zy;V z)g_BVtK>yKt~Z{Z_u}lwj`v@d{b%^_!8SQ>|JmKXkF)dyC3f4N+*lR&>#O1Pr{;g2 ze#tid$E{PaaP7K~Yg`&k={z2etH0`=xx2^4bnb?}#=C14xj1G#X zk@qBx<#@YQ;=}s2EJ4Sh1{x`vu24HOr@__r>{RA;SD*at*;z9qF-mC7?whxEYK(t9ndJ65**dKBY9J=S;^uwsO6Ys1065-!l`X z!ZN-ro4Io85|1_Ri*2qH;KkpZd1w5J*>(TzJBb^wMXnn}Xk5H_u}IsF zYr7n)*96}B?eZ+PZHW_CcL!{|_(SVWjB#=h*OFX`ix$6Jq+jQnPxt6ao@Y|dyGn7A zm$r8suao7f?hi3fvnqwQ=&UT+r0jO(;!2LDm_sfd=NZFWBR8l23MkEAWPj#5e{k@G z`!4k}*U2rL)AmdG&)I^nCQr;S%0J6)U%6ayU&nt2;}~0COWrT;KW9CBm3acH$v!Hl~;=KrQru+H;8w>c~cz+XhGlPyCXNbB=G#xy~cg)%~dA zTacd7Pp$7(J2wluPc>Cq^kdtkJ6~gjlZz8VvR0{2=X(67eE0IZ_5Q&-ub%zssuXgy zYxQHc)5RAH;#;Q+?Od^HUX13S;`&|xCe6Ljr`>zcaB=U$Y$X$a&S33ZAE$JzSQ#I- zqayOu!$tPW=9m4GtY)VQht3k=Vs%&$%Ejt%)Z$WOSK(5Pq&b;h63eB6+BA<%S=d#$ zlv(7l7n|m>DLlcw8rZ~n=XtR*H99N^0Lcaz`k5?9nv)4L4NWsl8rg#7z8awmy+jr^ zeGKX^S}$~E;na$0Q;gONU1|$`6cuo4kGGd(cxR@w)<@ka7y~Y%ks7DElxOvkEsIYD zevZ}rneuO@?dsRdjP#_GKN;7Wd{bVNXZ8HP?uV2To;$!ymmzQ&|3!A znkh*;lB(Sidp_HE zD@XU?gC45<+3$kotUR=J*KoJBWr}n*^~SDtU*5XaIOo^|mvd!}Ol42I7yIpetWe1G z!b3b;#m@Ta&b2`zJ_i!y()IGMxh#>^bA1=ccV6$oi3@!m8~p7Hm0q3ucszN|w`-(Qwq28a!X(^Q z*!ZI1g9Yd0CPk&rD>#y-@b*XouSSb7!_unciQV(f&Y5N@{adxGdFN-vjX&iTl$F+n zWOp2i`5mmswa1R@LfT>07hQ)8I-V)tS{o7*v4_vcBCz6Rqj+t*T*_@7Pi3d$rU#`0 z^_eFJxE`$1wv>AKpP^NVxyUlny$|Cn}z27^Q|ki%q_FH;!|wsDUFOCQ`=743)Ax_t!y;jM@n#Knt;0J~J1Xh^PJ+XS|Ni#Y~r}!b|* zJ2-jPlTSgMb056OKWq3)eA@)`=7sxBj=zYz<#3O$?ayWTh1HqN6;{%ped=1@F5!hM zbBX_w@0csdX_mTABqPzaq?0W);n#5{@*1N{r^5g!t4&DvK87xKu4t&BxYxqE4arP z-0=-wq*)lVa(e#M+nVePE_2(oH#Y2HXqohVlf|u)bMBk<(l+jRv?E*kvWLp|kaeMd zwZnLLwZazcGyTuN_%HNPREo=seRrj{uKKVhFlqlUp>?e4UUiZ7%lxx`y=*MFC_i!b z%jFwolMCf5>n25)v|fH=w)~DzM)IZy>mzQ>QQ9+WZ&+nuT>q)?w4#~ zc+N|n!MGtoY2w>6*DWlpjrVa+)i62uu5gL^R^LonrdzMCEc2Ml%d%?XCEEj=nJy^I zTjLsA$L|`hR4LZH?c<$;pWAcWI2(JJL;_q7_9)A#@%ANt<&mDHp8YwkY^Q81!`!oJ z6E5*>(tTWWVt3ENl=211y$?8Im6VbnoXC5A#=O#4m!);P!|yvURw+4GbyTJ-Ui_$4 zy;jneXGPaM)83>ldGSsE8Mt39*mBA>VwuaWRpyJ7s<;DO4!_G5s__t)ysRgn;m@UL5S~^#mmx*J%#2Q1?uN{_ns9g&*YTcwW%{o zP1!}~o@UXpq_i{dbu}J#-}&@+{X{XB1?97KtZU33ttyL7^r-2HS#fO9lzH5CYgcb? zno_GDan35>nsMJ0)1Jpmd6O+(I!Bzd3Y4vxyK{j>Z@*H|s;7?bQWItemOVV`rE!>b zjxOkd2XELP?8aTVJ-jXO8@uji9cX9|7cmGME9?ac0FmdZAp(`+SOr7+1Y(oBijox0bfg(bFGfuA6Pqe*ezD z$l}3J7Lci0k4Ctrv}C!n(-mPN7%tf-L8s@vI~7zXNsC6tkUY&T@X4eAYD`5l;7Y$O%H#43y54Z zjdklOtt*Q+ z>^;wvF3MY=d~9Vw#92or4et_*r&CtEDO;_|A7Q8Rq3lwh=iU=0bv|3GyIYE!bDT|G z4#^)qUXr%Qy)K=%Xus%X?krj*?IJ+IqCLUa43jnk)WS23EVrPUs%l+CP?TR-D# z@vP%X^TfFOIK5ckrDg@kPBA*e5UbRu-MX_aQpiEcj;a$fHFSTu)Q?hVPx~xXFCJmhYRL?90?#G9_O0KZEc5)|9YyReHsnUT9pJQjm8>zh>|Ji`2WM|K7oGSM>Qj&BYUWj`ukn(7Cl$Vw1*9 z!F}OrM=LbhL)NlQ6)C$pty1gt)}FlF-LcJV>kaRH-!YH-2V449;U7U9KklBqf6pUq zXL)GEqcD#dV#kvfsx5J8`)>NaOhYxfPGA4mB~I=8#S`x4pWD5!kj+JDo^`2*6VDA( zwvKS?M{eJgCqxGSxWwao=V@DXTlK_EaXg3bMl~d5dvNm4;Ej6r(c`e_sr}qWIX4e` zSa&W=sNGkhIxR>2(Dp-xM$2?lw~9)9`E`GGZs6Inccu9=io_(ZadRBWUX=Cq^n7cLt5CwgRN{0<;GpyCfX6}i~eVE5B_XDxwU>RbL8*(YfE|4 z-~MNa3bN(ybpH0g8ORzofBVk>F|%>a z-~F#0KqfB8w$I0_bY3&a5%bzCFZWty*h2e^EGcW{HhEhw@erD@1w~vn+5pl@MIa zWmC4`fSNMPm0KN0Zgg&2ukrKTls}v5edb;LdYK8{6F&A>dbjel?~;>F6&{x1R9AK= zZw!5`FzfExu%BP&{A1JEc2l71(xgDM2UmJat?&0=Yb^*~nEm+2pR;DCmzCzq_;T7d zn4h@xF1=H;$R%0z)b$xRug;p-doEA^+)+Q>8IRj;{aQUYUGDb6A8si>%ej4Cdbo4l zwR-aLWEi{5xf7Rd4G!+yrq3EEZdYG?VIP;%F1bgRyBD5FxO!ybOUP&SRdc%$}&>EAcHOQ!CZ-YCp*@=)r>`OM!|81t@o;5o65 z_d|cq)38HfcRf~=W<7W!-}7NZoEFEI^5R8)cMRVPsmyhjICM2uZjHjzxfgFOF5AwY zT3w@Kak;N~Ywq3i0o;oDN3JM-H`~5%$;tIkK3=QQU)2;}VdfY2@Y_rKdCf|<4>C4& z@w_rz^ux7iLU-4?>$a!XMP+Htsy3ORlQu`NXL%PVD>Ki`<8ym_cFyiDt6vqI7~5Sm zZ~6&?9*<3nPfYPx=DO+hc3UIY328f0r?_wYCz4~3rFV2)>C!2G-*dK!yGgCI2$eV^ zEP86jn@_u@RJh-kn6aeH(zL@gtk>XZIG>E!!>_>$&S&}DY!NxNs{7H!IyQ+_Z*Cs; zYdfa8@yUsctnppTq_#XvKXkC*cB|v|BIjq1Um0&|+^P7v@T=s_5OWo~JiEo#8q$;G z&E*5}D`cItwa`{Hz<_))%xYaXVG|n9s z-F~v*>dCo+hi%F?hOR!mb?f;;)|!jwUY2|3tl&)E;_j@pU`gAPZvy(RXN-*h%;%2j z*bzQ^ed9Lcs*;xp7j@Zox?Iq9o%Je>?Psp?(>|ZlV3wjON0ehazQ}EyAp>9j@Q+OpaU(cDw2KIe5#V%J!29O%|{ zq*`WXnckJ#n={G|y^Fdr%`)s+O!3K?8bwb$3k2ChC8Bf#TaIr$FQ&2H?X@s_eZaHc zJ4FUL4V%7S=;mROncJ9Unaan#ApN+}gQIEgDUb6H-QHk*{LXFhm|m?XkG*!=Nu~)l zI`&6$g}rc1_-wCbX^_YD^znk1yUWcs-Z{O*$ggwv`a=cf!EOB|h5MwHv5u-k!>Q~o?|h|vFK*Ag z?5_17XkngyjoWIu#no}P=ge(S$QY?vew`mCB5VJ!CG2)mbgSv14h^#tMz=1S3!7b3 zE@6FhyW#4&O5-6aKh?FOe==9Bd8xZk_XKaF;i?yx+6pCCtU4NI+tJ-TYsItw3?j=; zb+UEeK5S-l-D8KRP57RP-$Q-|NgUskCp>q;lH$S>?&|E*c5azr)_21C&L=mcy(c=l z+Yg-He(=#suJ6^CK4}N2yQN>-Xz)Y-xS8hWkE>6G>0g}57rv_D$7H+OIT}93>g;bW zPueWk?Oh zK)IX^Yc8MA`YS*0U%c@xri~kRUMp^V%D&ar-haK&+n1uvhv-=f6nZS;wp)Iz5S&G-+cjY!9z_a+;@m%>z1c2lvH`hSiE!f`rA`- z^KAH|_*U9p-O^`!d+)pLu2n~Zxe~Yb3VAB@1z28;aN4p@J9tfX)TK8uqR}5#SbkZ( ztM-%XJc$^K1JjGPWv49YTwO8WBJa+-HYWjBv*k&X!^8{f*0NvK%`1L8QSNKF?E|Tu zrw^@K;}e=;^+JS;m8sE@v;4=mU)nz|2QnA`_%Z+8KThAN%XTKN*_D2GdM!(L(Vl&$ zG|u&G>*!TrzOSkrc*Mu=_>O(XN1w`Z&HpuN*JGa4sPfX;|DI$osk;0JF7-_ihS5grU{y;DB$<% zdwSb?+4r5<<}IS>aooIQ${I$gF8==vd5pIe&kuIjs)#TRd1uT1JGm-VJzsW7n)Ff|8tEK*kHoC;GzxRs%x8044veq8A=HSmrVzyY!|F(*)@edYh|hQRx#%jH@Iv#dM5;KR@=!WWNv01sLA%)Y|2Z< zcjD_`Uvj`azO%c{f;eBH2Prg!*{8YnCGd*!~pHlyY-mVvVLL`Ci| z_wN4Lm%fEHIk9+!O{j}cSaTQaEuQBmQj!+m7wHlH6rcCANjKKKXV6P6 z77G$Ql*F*yr{VM(<*z0McIv8I$;tW$88H;K4v^Udb{Akx{E!#F8ir1vv3qj-da(!FRH-k{*`|z z_Uqf`@I)^cHas)Ib>_X0A4-HE{8a>ly=7yW$jr0C9EH8HavTF|ek4E!Z z-Ak`Lus_1N=Sr;Ja>joOzRwoDEVbbO$dqp??!EFreTQ)6ie0gO%zqqapLMRR@wIFxjrnmh}zouCd*fA+mh?&bKF(7cQOPmxGX9x8gp&; zv4ov5PY-vCuKi?Y@2{wM%eE-C08!6mOk6g6`T&^l9C0q@hD0oIoOG{64b7SU-8@xuH zQWgg|)^V_0NoYH0*qa?_kR5eJjblbZ@Wjpai{lvfr}KCFSNa)+MgNvp@DH2!X->+r zf5%S!tFvs_Z{{o5H2cb@F}X`1<7^VIUSpPu-&XgU{5Tw11a zowv~car0|~lBY9I@n2p4d_gLO^nv3liL1}7cygn2>W(_SD8BIfOxLuhJFj_dNccQH}-Gg6n52HQH(+9FeXk7sX`1FmpCb>Xm&VMUBhCo}XBfwAm~sx=-RmvZK?x>IJ`I^LNYT{wvB-lsK@h&B%mP zMQinxPZCG#I9BZA*j(_#dpnE6mQ2<~|Eiy^d!4T1Hc6#&qSws~SD(r9vbT;Y{1e(- zTq7ECTux-cV&NSV8y=fU9#rtjDd~Fo-qM)QZlRE2)72}lrf&REw4VRqg4h2UxZgi! z>3A@mM``CQ>E{X;dOdQQ3u+$rajA1vJk3fw-6nA%tpCn)uh{$@t4*qe=LM*4GGX7s zVYI68@cWsw=SE!GdSZt4q4Jh3VglvTQzoQtyzIc;vQp|;Oq1zdMdq(Jj~#k+{XfI` z$A_Bgcg~&nJfHQ!=eL1t_I{jqx#_;B#4&@ME{3!)-k2-l7Fv5u#IwM&&(J1b)+>d) zdU@f$_YZ1YYx^eiYAoq3?yQ`ur4Xr7E*tFOF3R*{*R+%mfl+^x%buT_k$b#v-x|ZI zp}%C8_;V=*o}%}E*{xmp=*6;$p8I$%cl0#`@m_b^=H_@J;e=^g;Kp7hE#7tRX-dzE z-W(Kb&e0X$yXkqJ$+14ar!(4Qj!yX+@sZ7_cVm>QKflb|vMe5bDb=MyX?}C1O46n! zF69onQsHr;h1*Tk)3<83QC{M1y%?$IdxM&NpB*mM{m)QzfOC(K=Ha5Cxy>?e?x!sL zLVdb+J^S!1^uxxGhYRlf72W5z(`&A&gvw;qzMPb4?ynxNI#I~pE!cZ|j*U!wDBFaL zv`GRt*9FTfdi_{!d0LxsPL73~l!yGO}kmEOMYnyWl^A*YnyfE4?o4 z)qB6D(t4Kf31_FQApcH}_TpR5BqhXnd9EoJoZ2UTJ!;W@=AC`>jDqG|=(?KCXW{iY zJz|q8Ysbsxt30^}mk8;tZ-0H$tMB4>vr8d%?|5fS`l!j^*LkdC=~fI-b@n>Bi|_l^c*B%b zDdnlBzU|X*>ijj^!fY?^bX)OD-G9%CoDf{Mu$P~0N4{Y0tIOGfzuu_27kA8*o__Sf z{#ZSZOMK6w;xs(&`YfGtI)P!;(g|N`wiwS>m#K7Ew{rd8kf<2J$JVnm>%1r5=gPQM zU=VhKVZwigPj4bsE1Bo?R$M>2ckP+Ax9&u5ZdFJ== z@1z9T9pz#W`omf>uMtyzXf2sF9lc71?E*f6a=MihTq?c^N=`i&)BPl#y=`aB?dP$2tX?1M z=O=B5S!a+Uv94WYQ-HB}iSix6)t_FA7H<{TyY;aqe(UYrowxaR*HrlU?u%WzbP|sc z-+i^uB9pEa-&~*Yl~?#HbJB{7N7QzP8pbyr*OQ6+&+zi3q_#&%r%CU(fHM*&)_3OJ zO<}UgnKY5p;?mZPwLhMO@vaGf&^6<#Z1I+BzO(*jUi=xDcE?w>^=>$WgWcMgW2R>d zzGi%@+u#1M!bJMbt)l6&x;r9v-!-d6{%^%s4h|2iN#0~DH# z4zNxxY6)1Jx$pJTD%-5xYd59tQBr%^ra1AYuz~8<)4K$X{)pM+rGNB#b=sxwg%tn2 zzqjp-oP>DVs;^mhiDbLI)XCf0b9#+Ri1XI@+)7IYyE2b;ZBllxfjgOk)pu$ySv*em_&h;sZ?a2o zb&Za}ttry)&39~jy=8;yG{d!JF9hF-d)~ZpiARW2aYm2S)@vyqebs+VVk`v1Q`v>9 z7k; zj_oYF;Bo6+lxE4K8yAikNryeQ+&wpX>SC?dfSI#q%C5;;7M^=!i_qU!+ln2kwv`1~ zU(I>e@HOYng7Q^2&oaKcdDG#2=;m3>S2u5Jytg{tgne~-D)Zj3a~b?$=T5O#t(|j0 zZtdJDd|#t27uZHyYnV3isA%45Ofr?5p`@f#!}4f_mAQzY=Ux%sqr#K&T?6g}TB>~s zKo(*yba^uSq5~Zy98X%i=LCPsyCL}G)yJ!^-L60E=acx)z{QvQZbn>rJb@+83?zWCUJ@CJa>OtD z_WtQ-+XdRv+;h`9e0AD$r>AP@vD+kSZC6}0(Or?Vzp1gfM(6awi2D}D_8sLkVRm|c z+$3_AV?D>Yqk_r4J8hy4PBdD_@#VwB3bXLDA2L6@eINEY-f42y#m|TOljh3VoVc~+ ziqoWPvke|U&C6*yZsv1x`|I^v+nJ(FjP55}2?TZ~?U>_QajMrQ+{&p(AzQL}=EQI% zL*Z1GBh{{}w3Ur)99SpZTHAJwx7T6oZJCP?=5gsy=i)unE7`7i!_4HF+d{97j_1mT zC;H+<4;wvn+y^bfIK1~C-+nRv*t$h*&p&>&zxzjM^QJA=%_fJhmE3r*d;MIVbyi1A zOtgd9x3-1Eye;Pv@akSw&uwhYC%SIUj&)Uxi_O`m@=66OOH{_PXs_yP@%Y`lEL-}3 z+wqUNhtuS|l(mmFzPNkmQ?H89EzeESO3^J}r6xuwb}p`yQT9D|T)C#tr)IUI{F1-t z67M>s-9E2%T`i$p=BBUvgl<-c28D>3x2~LNPI|OrceJCiz3bb_>s}Vwz5DRE&18jd zUBo6<*&_n-lIk1Nb$oQ!t3I&N9D;-t5`QVte)XV$~MjtG^e0&5&OG-SyQ4^YC}wR~O{1zbn4l;comc z{jg?-l!Q#~RchClzxsD5MEW~IJ_JK;BWXrctXy=$I&H;*!;(hgtPg*DzqY}yc&WY4 z{LAWFYfBCw4NjvBTU`;5N+>_JtuI>nNtLyT!{kC-d zTs9@sXZN(8*tZY1WNPvou{3b5+Y%Ef`h7e<%QMG1G0{)>RD;5_uqQD;EXB=y&%6n4+wcCXsH>xT#>?fENu8fVx2Jpc?_RoQ zll-4Og^dww6DK|nH+XPv9^ci652JV|e_`Ln_~cx{@)L~mA`4mq?#LWaHrHyE+Ihs& z@}%>C8FLce6Y$o*J5AenA6VNx{aoP&@0-b{1xa zO}U@+a!yLS)U)5NYcDFFD+%LGn)ux{OwgyVO7s;=fJM}{H{teXc7AIXzp;v58mRDY zb?+6U6L)2s-g+-uT^utbxhwk4YDJ@Wt_9okY&aiQ?BcVWd*Msp@5RDyj}LG2xbwtg zR*NF1P2-e+9UD3hZ#7N6V*1YQ`BB-nl!ps`#dY6VH<`VV_bA(@wVz`JFEN?7q`63Q zv}D|Sw7Sk*|8N`^=PhtABLLzLhXqStzSKV@*o*y)nkUMB z4Q49bcsOHa_hXg+40k=gy;1q?xPd9*SLjruT2n z7D>;`D=(C^JEd0}Px5AoN++f= ze2TNyc+}$?biB`0vwzMpsW(Ym&t=~_>c{qc!Rxr!W}-}&ksEi)KID`!F8a@Kx9oUM+o~JSBH#7u9_n-DQdT{DZR17%3H{aKQS8RX zQO_y^Z{#j`^`AlLVVBPWpJs!!wzD-SUR+rH$R&XxS>~Lxwp{aF-5a9SKW1$ain3g` zL4Q)1MUq$7SLyTeB?<)=Y@ys;X9KyL(*4+S z&($?1sF`E>jbc?klgP)0+_I^iZl+-t9KLZWb(VEvr#N+E&PC2!|9geh&N-WHsis6ul08wuAX^1^VNTbU5zm3F^3yZOJDu(72CRWo%7*;ukhk9;DX?( z>+;NMmY3zle{+7lkWaQj6uX341~^9YX>1Y<7rkp_7{~t;l%t=+`Y=e#7E${!MQb>6 zwVH00HEqq~-)iC2B6}d?_=>4!$x}L>t<%_%*y{WBSm`&7%sbyo|J~P;E_s#Gv0QlZ zNh#-+t0%&=L(MwZ`LmYk*4T@;KEB;koo#vQt+{iK@Z#HtZSu{l8#Xq4v22{-;%3sU z#QNCDVAir{$s4mihA-@YIn8*ByUTXrXf16Ld|KO)Y$0xGf7dz587aqN` zL%JZbcS^tejt)9nP#bJ{Oqn*P!X)KJ~ms z;IGAcMZ0;E!+8pPr^x+hX#b_QLwn)g_eV`zYC824XZ0j}O|R})XEAkAl0{0m>5W|1 z1rxTvcsuJ}qLfUEAQQX0@WhxMtWU1(+$Xf2``ZQ23r?~BZ1;8jGl7pr2d8GP3*56? zf0w$^(~4^y%>DTjOj55oJoCt0#vJl+pQWN<57X*dZ`Nu}Hx6#v_3*sb2kY6f?^fpR zj=f{-ugwAOoF1_{R%<>jR3uRoAm z)Dfp`xcN;|Zg_=VC{M}qol77281|hvkJa`1={DQsgk|(jwuA1I+Ear6c(YGexM3RG zJy%r2lKoC!#4+E1w+E+7nY2Z#^&5$*&I--`=;yu8@evljvEq`9gQIM1C%D zINYt+Iw4(6M=Igj)^j)BUoXyXpSZ4g`NB_k_1;ZfIJqS6)qyz0X;lX%+{n77wv%UZ znQ!!`#S?G-Fo=`-P!nr&re@xM2ENP$h_a#=y`%uO#N-(R;h*Z3T-d#&@MT(Us*M4#ZT7jN=Py*ZoJyH8AGc7|n1y8D)C zHy3S8zVUG0&7u!VG0{po5;HG(%(A_7_ejSjD@o~@GVia3=M+73+^So9`F!OhPUGh) zOm_sARRlPk=2Tg?^r79(-{nRXcN)`M9ZyNy%{$s(VZHmsbjwK&Ar5=8ECmmk9nThh zs~o~!w{Yi~-ZI{UMZ2>z?A9{J?^yh>t&y`n9p|SsdZ(J@ttE#KMCG zRi^ji*R6L>y4y5!W2K;5fAQoz&DA09btW&w-iST!zC z`-$kq&mA3xrZL|Z-0OGO+_%dEkFMGE`Ph{#l*Qw&LymUv&|*)I`<5*5Q}~# zcVCB#T}}dB{ccaMZ!~ZTJzB9bIT7r|pQ;rO$R=FOZ zn}r8Og%8DcZck;muwHaiUag>u^I$|92TNbOrboG)vC3jL6}j5%2-h<@#*0j2R!+}l zbAC5{;S#Hk;(1?OlQbvU^t$&XbN1~HUw!J@oXWei+0wGCS)=&4_m^^)F85NonZ~SA z;hd;)%4yNWH5D3XM4`<_+75Q zYfimqee*Y8m%Zomw|&>Eck(fQHCuVO%}gS-%hk!fCpPm&nc+j}Sj}R~s2zsJ0hz6L z{Z38`Ubp6sZkNW>NTzGvUA|X#@HSZ->n#*dZ~U-t6{mH2iLA)ZQz99`a-l|B7nv=1 zDeK{uEv0+mnL_E#`e3vCRZS<6#`d(!e-x%|2zbUhN!cUuNWw(Jv(ZRvw61AJ;T#{TFU9lSG&Gx%d9>3JU7fTXy>)buNQre^UXRQ8lKqS<0Gzq@aWDB z%T+6OX_`hn(Fi&W4a$BC&o~0Fkg{C|Si8#I8EcKe2_WXxQJGVV$JQ>OEvW_RTc*b|p(AYIjN_tmZLViU2TWhJE^s6!RUnU8AeH%@O{u{*<1zUZu&gshCGLSi+?(Jb+=9yfZ* zBo_U-r~mr6iuVsyYE^r zwW~vV{_!LK8OlF+oqKgT=40EYhr7=1GWJ>L(~{l1?yc?ay#}AX?&x)_O?z|3{)dmz zYa7)M6YoX6Y%^N>e!cHgxtm2hC8vFA{3L2_;~5m-u9F%bedaiaW_R4RtukHjABXtO z-z7GEak5KE?D?Yq3}&xSmn)v!q5ST^2KJi|>{Wtx%q)z#5#VaRD{uM&rUV&du9xoJ zdHp*)Om-=pSMc~!moM~Q=*sEij!75Rs$8DE_LfTJyRO$|>ms{N44?dX8+0t=Siixe zt*d7|InJhk@SllvUhK!sFZm|NDN99liCC9RYYUm_(zdp+@8=ng6TZ%I4>{N7h5g`e zJG(=}McUuw?)2hg-0o@>N0^Uae0H?1yf2y~#mUoMOS$3B+Blw5bEGqL=bqOW|GjpZ zW4<1v$Kj`pkGH(ZzBzGSOzENit?NSbo9>t)rbq%bw4zG2o=NM>*ml6j%Nj5G1+t?mySe!Z|; z4B8tF9{)mPaLw3fp!27x4Se~YxD7oyZ6j4JtkA#u)w1x$#qJz+Lq+vww)0^GArKk z1ZIE!Cx7xu_MX4i=@JoJrkYF(>${m2b)x9>Z1KIH1@fx}g`TLXy*W^k;4roK)IYYx zbGH7fv3MG<`gm7MnCldS72bB9(h9CQi#uDI4!8?Q9ODX}WvTDHH}-+@#1(Io3vbCr z32S?{=kAOaF0)bUET~dkB&4Zy`mX*J7L{VQP27gZvyj(LPVE1vRt>Y4CWi^H?jBrbS2dw=;-IIC3dg`&I!f47?5qpFza25V~! zR?q5kbk=5hT4j1;uns>8BTI*QmeVDMq;&*$P(Zj+Bp1hO~v##<96`uXK zQ^R8IE$6#lE>1Gb$_x`@)E2uktlq^hs;seaf4r3T9#cg@)10F$bB!ns(e*>C8dV zw<+lpl8zdy?N}q-rW0uRvCr$(X&+mijc2MQV>b(Fsj^Q#xHzooz=Sk+ zK^Mp92U90D&$HWqP~z5;JSC|w0lr&X;y5E7A8ax{y}hg1@vvA-sz@jEM2UNRYu^eV z`_FLmU|?W|LEDX%aPPj7OclfR+FN}jV~+SUdh}(-ZxsK!L&IvuCBd09wT;6Y10`1e z2uNQ!@to|{{8Z*(#_h8TuD*``<|Z=QWurw)IH^rW7;&~p~rMjM+cs4uu z;coLLpJvk(&?^8ZOFoe#d%9tu9kXQciucpBgekz^rwUGGx7vog&eQt%v8Fj(jZjX6@`ZxEQ*wEJi~&_H3?kZkeXe zTn4d4Uh|a#-d_B);E<74YL@9dt{RyFFYdCkkIQ|Ttt&1sYn;0$^RmOadnPXzq~}YO zTrl3=Yn35+``BC)p0|(vX0d@3vZi~P3@JAiD3tN0(D z_|LFw;@kUC2e59tLSN{HIuFt$^#0@9FX11TEt-0lE9ZojtyYTBic~h8c$pYn~Tlc6YIZX-)%Ts$T82B*jM?|=3gl~be zT3(4u>|z(6aI4pb$N3+&rZ0%zARPIztNEy*%Z(j+aduXrDccRU%ly1O-Ad0U*(c_1 z*FLWR?@2ozb4UFNjcaiYIcnfiR9W=FYD%h9#gpV!=QkQFt!G-!b}Dd*c}iGPKI@M~ zSrg^@UF+p?gim_$@7gPoZjiM`AYkR}w5y>$GV@=0ndzR^-0F4xc}z#IkKxh4*saB> zf1?7tSIAD+D|Jutx#Q(>bYD!S+l|eVDwRi8w^`(d{Ac*Ex>e);%!+GMjP<21wWU6e z3OKVT+e>nKZ>F=+$F&-1ai&XoP9NK{kWNaru1S>@TmQrUJNMhUu^Xp_$imNEVLj|p z=a#>0-jUL|EiL+&tII$AoOeOAxAoit_=Fai!J>Nq@$DDuAN#tN{gg7jSTx6Jav~m-5TTG`dT3oC%D2vo0%X#@2#$S{toh zm)VA%64TnPr#(Nv@k5n%48OR`(^c9bniEfVZI9e6Q~1N;;bD)a7ju>;&)|s(Jr@)I zv?}4{DEr>>`m z4+UwhZ$8*Owb08UR%F_aXUyV8sbwn1MIOb3=PKm;McK-)OxkO3@RUz@l9oExM_q+$ zyQK9kuC8%2s0@|5u6AcWyOiUeDr1|7C&I!;kDi|ITJ<+;OSA3!yOn08lO~w&FMV?J znwP`9zt<o3ex#yEL0-(vF=mSF)0>9;{LMw9KSg7pksu@9X($=XM40 zmy={30qbZY?fC5byFIh5PWmK9t$keac*XsVXAN(?f7Di5c1*J7KLdQE3g?=x6{sy~ z98=0`zbh(nrQW6?bvg>zl8HzQ&URk$E6FD_DLORaLH-h@Zz&a z^&Ocr+H7Y^y;q+uY~D1HX%CL?ZoC|%&{zJh_S~14Lw(oxo;kPn_`wD1eJ|PCMqUatc$Swg z(W$sHzfR!6yNMf&l2*6Rcvjo6zgW+-aq}!w}v%2dZkcppymCb9+M)rp75#5G1oP(XZp@4pZ95B z&a`vxJXxz{f3+yio|6 zW-~5c@?3Yu(Sl`)jf}b`gIc!S$E|C_ZKbXpKX|NJV|sMVmA;L7XUyKnZPPM+5UOyw z^^DJsofa>YPA-?yGZx_AEy$(4Am@qP(o?&4xrIo4aI6u%rr!R+Zg01v?tSaH)v@;r zvr2Ezk6g8Y<4u~u8Yy20*wqVbLxy*mI@H$o=v||66 zA=UJ`sf7R21yk1NEHC7rF393O$9cj2w8ItgIl>F-r!}t7w@`QZ&!Ec;)z7QQX?pzQ zlN(QNH~cyBcNXt067^GRKehF1EBeSPiWVO7>0SNw9$p)|IW-Dok{|Rrhq`iO4nY*Q6cXG54t+lW$F#%4RQtNBix<%#Xi1 z*do_Fh9 z@>$Qvsb{A1UX#pqtJwJNq3_A5p~aTFmYc5olwNjrwWD;}yJDl;W$zc=UHhqj?v5^J zzQl=UuT?CUO!%|B?2Kt;#JpU#m9ZxtN`x)g^jajjQA|U{Jm8Lskd@>*?a6i$d-D^9ae|`O&UXiI9kaAB@RMX3a|O%bjtdMA%DRDfYd7O~ozS zM3ssDeH%|yw%+MEm}PPxDO{QP774#ph?>rz8* zOp&%fn$faDcbDvSGxlt}DBvG@xOHYQ*Q?VVRpN_#G9zy5ibBXJ-Z{RcaWQbw%7YoOCz6XOqOI{brg?JKh&^Jm1bEv+9%OJ#nUWr}&j#^mggY zxRiX0>F^OB<=s~6Vppv^+-H#%BU)iIMLIR(?y}g^`;2mvbk1}gpXjl}w(DrpLdg&E z4|el&il?&en5CZFb!>}RfttHv;Hfv~kEG_bC4EnNdMa@1$*!M54YK?fA8;~BtAuq5 zM)mj@94ysZdGJ5Ohr?IAcoJWf^>`bK;r>DU*^ri<6$Xx^LGmJg!`zeObFKcfq&& zi^8l+k8bBMYhX$^xqnWOb*FORj>kh)oO*Xrd>hij*wy}a&sifvoGx!h=)a>D@98<$I z?x>%SLr&EE4sAV2HTgryfeo~zyOzSF1vZ%&44iM;c>g7wAgJ_!^u{hV&bXD!f? z$)s{!r~G8`oV6hWH)hRQxpCcs)iF9%zGYiqtX(?oCBNx3gN1RkZPGpZji#w-Jx{uO z$^O%l(2A?U&F2A|!QqTKZ;Xxg zrzf#rL>XdWYpAK|_XU*#U%0?6XOPd)8Cpp{PTGGDvfceULf!&?qE7_lxGSUtt(`TDM~SV6Jxf>Y^JdE?QMnj>$Xn3xifs4xmQ_0_0I6=`d($Byr=f; ztP0-L2;l~pYkhk9((e@8)3}(unl~NptUf(`skMgm)XJhS%Tt+)*6YPhd9xrd^y%qK zbElA_^{7(9suf8|Z&z=%)-a;F=@dAO7_E+xTnU?mWeO%MXMOln{W?P4l7c9*RH)f3 z{%_`fw#!Oqu_Xnh{DBtB8dT}z%s*H!mEbBBb!eiTmw--nX|LOK8F4E$i_}Mlwocq$ zd;IglFVjC=Y25et=Y?P1KQo!3BA3{H_dj=jssD5d?|1og?U&+Ddq}^tpUb~w|Fj9_ zcj~R=J?nK9@^}0zv77WS%He+DpBJ^Nf3{#4a|Nawu4H5jY;{}FcTQEUOgPGEZ|ICC zN1qf=6_(Q}SY=nal<-=9wDP27_n)eI)<2nzB45H|7MhCll&HCr#bej zkkvakmpRiur+wUKtT|`C=xmXwz-{qm)h@xFUEZmu%c3Vec)g?~V#m?cl}$SB+FNgW zK6+w$_Uh`5|4cRRtM6uQvx!`WiQs^fZPe(v&~g}!Ow%btIj)3I~*uM<-i z&yl^oC1Rd^piSAD$3n59i?6Qa&U-&wdXQp@0!RU8|ja%u`F}sY3t3v8@ zf)*Es96WtsM^Nwgyf@pTb1#+d%>B;Ew(Z?_ufV*NEWYa^#wvoQZAm)?f}*Edga(#{ zF6OkoZBoJ?@tW(&%U6j825p9WT4Xw+_o!xVeRW2L|LSo&Yf()%;p#0>EjK;1a}Q*R zO0Z-)Cmi3sBzkU9A5(YaF6oY&Q%|q{5VqiE&b!^B4=)Sb)i8?7n7EpJ~U%hlDxy2J=p_=Ly8@KOs~Igzpa%0e97{slYgarTfc6GIIrMO z$$hh`1+SF}3GDZMd;j#aYKJg0aVxYj8-eNd{r(U3_Zleq_PuX!=VSdNv~?o$URj0% z8!qYO#vXj{?&QgGWlw+Asj@X3K0S4XD-ERsPd2Tp%rK679>w!u2H$4J!xJSxsw6E5 zRp3=so!C;f+jz6AY1h-38$UD5r5#HgKBak@uHc(k;HhcSwf@LT%O06I_r(8P<6QCn zVL+m~gNdH^iO;v3mT2|HgzY)3-r2w7R)?GIdY3!@bOXiN&D*8;9T!-M%P2Ffxi~>d z;f$e{?OP`%yT{U-cAn}xWZ!+TEHOkOL$2MSy`Y`%hT+j&jT7~h!)MI;@ld+O(9+|( zrNqI#QCIRLRM~{KWIL8;Jojwp-Sp;7+cU}YCpNl^#_yQ(o>Ne8UHFsmg1@CKg}*Rpcv6ZoN}oQLtcweDPckp{dcCQu~}$d5%=_ zxlf$jbm5e{O@Hz9D8sF*zp4gq{KdNPywc2E=gg}PyBGEw_;d?MPmuI7-}?3h>(w9H zTlZL8NZ->d9R9p^jcV0NmhBd+oVAy@GaVO{TT;AP+v#a~YoF%ffFxPAiwc_RT9JNgUd+xtdRn|wxOmeo7|uLbW-+a1>r+}RY$?~1 zTo|vl^F-&@3puW?KEYY~Oc#>p&Uo0Bw7N;nF64GATL@Ya2dXgnD&&RU|9bxI+=8F) z2rg)N4$^^CkAmiVUj7mPxQxYf|KmsXO#e8ePAq*dY5ip>kKOl%SuQVIrsh{G$`_SS zP2PIzfHr5_%c5oRYr}cWE||EX}^P6zesx{fT#NCDO>22B0=?9E{Tsv`Q^%Tzk z41vL^>^?Vc`D|9xo?WVO?ct2slL8JIMQwX^nA7yoRS);9uYCt+EV4cvQ+7~P>hfK~ zHFw#kYJL_BJz+BCteYZ>3Ug`Y#2MPx!ZsRwxc)Ht!G%<@n|GxYq@L)URE;2Wu4pMu&q%nr*WpgmfhBr6)~-94$ssZuAcrQ zwBWMT@w+-=HU}nageOTJESRg<&+t%n?+gn^_XV?juUuD-xwGzQMd0oXodD%bj}kQx zkC#UI+-p5vl{%hswEdxW%|pL8S@fKokzwdT(YFu1v^OYceyR37Rr)IBW0SV>0=LI4 zDm7|;+RN+@8g4pqN8{MmbN2kN({44M=ec`9<;9!j(L%4{e$4ewo0Q2I#H5kx`N79Y z+)P!dTYL6gnHjk&tkZ7(Ufhu)qdEC2my=@5OHPH~bMku@UU_CAzqYJWa(dL!5Z`q- zZt;riieLVDjq~DZt(4BmqDook6?>Qt)~;vY>2!ThuHKu&;%fTGPp#axV)KpWy1XeO z$5IdPxjl2%lpV6hoCR{sCyYIE+E;Jh(W+#6HnwAZE^FQS8otMQ#qW032Q|))(iM?TrmVEBO8~S2J*{*0cIq&4|q|Gcb_X5q^ zn%wu?3buBBU!eYOvCo7;D^0%?ndU92iJcRCG@HdAXuDmUtY=-ruTUO&aLLOh9>Gh# zIUITAdsVT8>qx-%!cK`6rFYAOAJ3nD==Q^1O)|GstE0C}W>sftnp`_m&SP2DktK5* z6-_)YrDbVvlU#KrYj?ZIZAaCGAHF=De$q()lb?e?${A6|B`#GHSMj<93um)-32V5` z-1E2FFZ5H1-nH%^&e7xr+T;3u;crNqdDs4 zhl+Mq7_CcLua+g_f4Y`X{$yVMSO3!~)^c{xgL9+0uA_Qsw@u_PPqxRAHIw8OiUimDrSc zxIZ<+{fx|21y8|+#mDE$To!bjVJm2+W%?&X>ht}bTlBZu-wiOPA0ve4`@3B3xBlPZ zj8JFW-?N>52migwObWx{eBHAP`>yMpExBoNjvH#D| z8eonocmF@b?*0E6S{?32C4V;E{-2?u{yzg(nHC(~w^ z%}j22vBBxHXw$CMCsrIe&bH`qR?_}sO{ep#)tp7NK7 z-TGYSaQSJ!SKoHH+C1%d_icx($Di(d_3eUb;m`bCd$;gH)Ht3johf#gzeIb=J_9Gm z#Ra#L6fS42pKQt=ap-9BoJXl{tJK+SEWU+8mBWq1W)@U3pz!=mDaD1XqFz6j1#D+I zDA{nw=XC!<#~TMWy7gBYJzCW04*)yPhxj`3%;YLprAF*rP18h{GtSIBGTiGc>jSd35$a!?%m8Qhau|*7q9N ztWq>N^MtKm^o{nRvzK`{`CMOdb)u(<&y=Uip)w{8mOtlrrTXqzCUGHX+QWkAEfv=? zH>JGz_GZV{qrD1~&ipP`jK1gYVmv2Y_RXZA+%wNjjThUfWM}a&b2CYH6I?9FEz{%9 zvNq<$H?0ai_uS(m3vPyl?q2bq;aBAn`ERU$w3SXSzOU%=FJAsX1LIZc423Uep0KvY zwbm5stWchjw%2)*qFU#qIZLy)9`<#fJM+cLsb-Jnn24TUHz&HJ#(*_>!s#_a^MxjS z3VE@nQbJY6vfaw!yt{48+Ps~?of-!0CEAbr?%Z6vE&60pyI55W&*wae#S<*~GR~|k zm>T!p<>2a>yW`vV4vVwf+_l-~yK~pQiOoV5@5G)dvec-iyl-*a`7UYavMY02ii0iK zAFSuzpQ#QA0XNuB=;d)ogq+}X5Aeeyqv{a+=2SgmuLwNvVxZ$wOtVc0T_d!~QG z{xht4v%=!L=i)^y=NxTCLp>D@LVad_GdC*OZyf!wQiD_HNp-|bkuJAY$MdX?C8U{3 z`R-poyHmqjS@1yZ zI&=0^&nJiNx!SMJ*g2ywkSH6Tx*i zNXn6W=}YrHXH7Ixc6fB#-PcuYjc8R?I>&gT=bB~jafR!xSt(BM?|biSy1O^Uzt)HC z@0Z;#OmAOv`M#C8?pN%=J<;3ObiU89@in`2<)E;m-pO`0md^KC{pIhM-gnHqw@H29 zg8cj5`G1x}pU~=~_M#7Cl7FA#ul`x^v#Z{xzA~gR zc4^GJKzG4ul}(|OWxCu~7%B0bt)5ymG5o>O6uslI*PF8vaYZNJI$eq7ZJ^i6oQ`o~&n-T%$ys5@KF^|~8 zdVC5#)R=EAyyw1#=p;r*R|d>{P}H@BJZS#as+lbVIzWqrPpfj1mk zR`2|naAr;T)_umO7UjFL{reYVmo)#f{Jj9UX2(U^&(B;EIHSAg!vTp@t{tar*H^MV zaXIn4QfiB+Exa;gPo3|>F2pc{Ej{_xp^AfV-LoQR+6WaChMr?j`_IsMV)Kgk)sc<+ z9~J4mvc7kT4JPCv{ZC!#+~U1&74m<~>9*?ozGYO+$PAyRrAx|xESYubY1N)Jg`5u- T2g*F!Tae$j+hA>?{QsK(UK4^@ diff --git a/include/boost/test/data/monomorphic/array.hpp b/include/boost/test/data/monomorphic/array.hpp index 98279b9d..18f60e2e 100644 --- a/include/boost/test/data/monomorphic/array.hpp +++ b/include/boost/test/data/monomorphic/array.hpp @@ -31,30 +31,14 @@ namespace monomorphic { /// Dataset view of a C array template -class array : public monomorphic::dataset { - typedef monomorphic::dataset base; - typedef typename base::iter_ptr iter_ptr; - - struct iterator : public base::iterator { - // Constructor - explicit iterator( T const* begin, data::size_t size ) - : m_it( begin ) - , m_singleton( size == 1 ) - {} - - // forward iterator interface - virtual T const& operator*() { return *m_it; } - virtual void operator++() { if( !m_singleton ) ++m_it; } - - private: - // Data members - T const* m_it; - bool m_singleton; - }; - +class array : public monomorphic::dataset> { public: + typedef T sample; + enum { arity = 1 }; + typedef T const* iterator; + // Constructor array( T const* arr, std::size_t size ) : m_arr( arr ) @@ -62,8 +46,8 @@ public: {} // dataset interface - virtual data::size_t size() const { return m_size; } - virtual iter_ptr begin() const { return boost::make_shared( m_arr, m_size ); } + data::size_t size() const { return m_size; } + iterator begin() const { return m_arr; } private: // Data members diff --git a/include/boost/test/data/monomorphic/collection.hpp b/include/boost/test/data/monomorphic/collection.hpp index 3925f9bb..d184de54 100644 --- a/include/boost/test/data/monomorphic/collection.hpp +++ b/include/boost/test/data/monomorphic/collection.hpp @@ -36,45 +36,27 @@ namespace monomorphic { //! container with one element will be considered as singletons. //! This dataset is constructible with the @ref boost::unit_test::data::make function. template -class collection : public monomorphic::dataset::type::value_type> { +class collection : public monomorphic::dataset::type::value_type, collection> { typedef typename boost::decay::type col_type; - typedef typename col_type::value_type T; - typedef monomorphic::dataset base; - typedef typename base::iter_ptr iter_ptr; - - struct iterator : public base::iterator { - // Constructor - explicit iterator( collection const& owner ) - : m_iter( owner.col().begin() ) - , m_singleton( owner.col().size() == 1 ) - {} - - // forward iterator interface - virtual T const& operator*() { return *m_iter; } - virtual void operator++() { if( !m_singleton ) ++m_iter; } - - private: - // Data members - typename col_type::const_iterator m_iter; - bool m_singleton; - }; - public: + typedef typename col_type::value_type sample; + enum { arity = 1 }; - //! Constructor - //! The collection is moved - explicit collection( C&& col ) : m_col( std::forward(col) ) {} + typedef typename col_type::const_iterator iterator; + + //! Constructor consumed a temporary collection or stores a reference + explicit collection( C&& col ) : m_col( std::forward(col) ) {} //! Move constructor collection( collection&& c ) : m_col( std::forward( c.m_col ) ) {} //! Returns the underlying collection - C const& col() const { return m_col; } + C const& col() const { return m_col; } - // dataset interface - virtual data::size_t size() const { return m_col.size(); } - virtual iter_ptr begin() const { return boost::make_shared( *this ); } + //! dataset interface + data::size_t size() const { return m_col.size(); } + iterator begin() const { return m_col.begin(); } private: // Data members @@ -85,7 +67,7 @@ private: //! A collection from a forward iterable container is a dataset. template -struct is_dataset > : mpl::true_ {}; +struct is_dataset> : mpl::true_ {}; } // namespace monomorphic diff --git a/include/boost/test/data/monomorphic/dataset.hpp b/include/boost/test/data/monomorphic/dataset.hpp index 879f7500..985b7a56 100644 --- a/include/boost/test/data/monomorphic/dataset.hpp +++ b/include/boost/test/data/monomorphic/dataset.hpp @@ -97,35 +97,10 @@ struct traits> { //! - the @c begin function, which provides a forward iterator on the beginning of the sequence. The returned //! iterator should be incrementable a number of times corresponding to the returned size. //! -template +template class dataset { public: - //! Type of the samples in this dataset - typedef T data_type; - - virtual ~dataset() - {} - - //! Interface of the dataset iterator - class iterator { - public: - typedef typename monomorphic::traits::ref_type ref_type; - - virtual ~iterator() {} - - // forward iterator interface - virtual ref_type operator*() = 0; - virtual void operator++() = 0; - }; - - //! Type of the iterator - typedef boost::shared_ptr iter_ptr; - - //! Dataset size - virtual data::size_t size() const = 0; - - //! Iterator to use to iterate over this dataset - virtual iter_ptr begin() const = 0; + SpecificDS const& specific() const { return *static_cast(this); } }; } // namespace monomorphic @@ -134,20 +109,20 @@ public: // ************** for_each_sample ************** // // ************************************************************************** // -template +template inline void -for_each_sample( monomorphic::dataset const& ds, - Action const& act, - data::size_t number_of_samples = BOOST_TEST_DS_INFINITE_SIZE ) +for_each_sample( monomorphic::dataset const& ds, + Action const& act, + data::size_t number_of_samples = BOOST_TEST_DS_INFINITE_SIZE ) { - data::size_t size = (std::min)( ds.size(), number_of_samples ); + data::size_t size = (std::min)( ds.specific().size(), number_of_samples ); BOOST_TEST_DS_ASSERT( !size.is_inf(), "Dataset has infinite size. Please specify the number of samples" ); - auto it = ds.begin(); + auto it = ds.specific().begin(); while( size-- > 0 ) { - monomorphic::traits::invoke_action( **it, act ); - ++(*it); + monomorphic::traits::invoke_action( *it, act ); + ++it; } } diff --git a/include/boost/test/data/monomorphic/fwd.hpp b/include/boost/test/data/monomorphic/fwd.hpp index 0bd1808c..9f047eaa 100644 --- a/include/boost/test/data/monomorphic/fwd.hpp +++ b/include/boost/test/data/monomorphic/fwd.hpp @@ -39,10 +39,11 @@ namespace monomorphic { #if !defined(BOOST_TEST_DOXYGEN_DOC__) + template struct traits; -template +template class dataset; template @@ -56,6 +57,7 @@ class array; template class init_list; + #endif // ************************************************************************** // @@ -120,14 +122,14 @@ template inline typename std::enable_if::value && !monomorphic::is_dataset::value && !boost::is_array::type>::value, - monomorphic::singleton >::type + monomorphic::singleton>::type make( T&& v ); //____________________________________________________________________________// //! @overload boost::unit_test::data::make() template -inline typename std::enable_if::value,monomorphic::collection >::type +inline typename std::enable_if::value,monomorphic::collection>::type make( C&& c ); //____________________________________________________________________________// diff --git a/include/boost/test/data/monomorphic/generate.hpp b/include/boost/test/data/monomorphic/generate.hpp index 506e3658..c2ee4d90 100644 --- a/include/boost/test/data/monomorphic/generate.hpp +++ b/include/boost/test/data/monomorphic/generate.hpp @@ -36,43 +36,43 @@ namespace monomorphic { * - random_t * * The generator concept is the following: - * - the type of the generated samples is given by field @c data_type + * - the type of the generated samples is given by field @c sample * - the member function @c capacity should return the size of the collection being generated (potentially infinite) * - the member function @c next should change the state of the generator to the next generated value * - the member function @c reset should put the state of the object in the same state as right after its instanciation */ template -class generated_by : public monomorphic::dataset { - typedef typename Generator::data_type T; - typedef monomorphic::dataset base; - typedef typename base::iter_ptr iter_ptr; +class generated_by : public monomorphic::dataset> { +public: + typedef typename Generator::sample sample; - struct iterator : public base::iterator { + enum { arity = 1 }; + + struct iterator { // Constructor explicit iterator( Generator& gen ) - : m_gen( gen ) + : m_gen( &gen ) { - if(m_gen.capacity() > 0) { - m_gen.reset(); + if(m_gen->capacity() > 0) { + m_gen->reset(); ++*this; } } // forward iterator interface - virtual T const& operator*() { return m_curr_sample; } - virtual void operator++() { m_curr_sample = m_gen.next(); } + sample const& operator*() const { return m_curr_sample; } + void operator++() { m_curr_sample = m_gen->next(); } private: // Data members - Generator& m_gen; - T m_curr_sample; + Generator* m_gen; + sample m_curr_sample; }; -public: - enum { arity = 1 }; + typedef Generator generator_type; // Constructor - explicit generated_by( Generator&& G ) + explicit generated_by( Generator&& G ) : m_generator( std::forward(G) ) {} @@ -82,21 +82,21 @@ public: {} //! Size of the underlying dataset - data::size_t size() const { return m_generator.capacity(); } + data::size_t size() const { return m_generator.capacity(); } //! Iterator on the beginning of the dataset - virtual iter_ptr begin() const { return boost::make_shared( boost::ref(const_cast(m_generator)) ); } + iterator begin() const { return iterator( boost::ref(const_cast(m_generator)) ); } private: // Data members - Generator m_generator; + Generator m_generator; }; //____________________________________________________________________________// //! A generated dataset is a dataset. template -struct is_dataset > : mpl::true_ {}; +struct is_dataset> : mpl::true_ {}; } // namespace monomorphic } // namespace data diff --git a/include/boost/test/data/monomorphic/generators/random.hpp b/include/boost/test/data/monomorphic/generators/random.hpp index 0357435f..89d0090c 100644 --- a/include/boost/test/data/monomorphic/generators/random.hpp +++ b/include/boost/test/data/monomorphic/generators/random.hpp @@ -47,7 +47,7 @@ template struct default_distribution { typedef typename mpl::if_, std::uniform_int_distribution, - std::uniform_real_distribution >::type type; + std::uniform_real_distribution>::type type; }; } // namespace ds_detail @@ -66,7 +66,7 @@ template class random_t { public: - typedef SampleType data_type; + typedef SampleType sample; typedef DistributionType distr_type; typedef EngineType engine_type; @@ -127,7 +127,7 @@ private: //! //! The function returns an object that implements the dataset API. //! @note This function is available only for C++11 capable compilers. -inline monomorphic::generated_by< monomorphic::random_t<> > random() +inline monomorphic::generated_by< monomorphic::random_t<>> random() { return monomorphic::generated_by>( monomorphic::random_t<>() ); } @@ -136,7 +136,7 @@ inline monomorphic::generated_by< monomorphic::random_t<> > random() /// @overload boost::unit_test::data::random() template -inline monomorphic::generated_by< monomorphic::random_t > +inline monomorphic::generated_by< monomorphic::random_t> random( SampleType begin, SampleType end ) { typedef monomorphic::random_t Gen; diff --git a/include/boost/test/data/monomorphic/generators/xrange.hpp b/include/boost/test/data/monomorphic/generators/xrange.hpp index 55a51110..b28c407b 100644 --- a/include/boost/test/data/monomorphic/generators/xrange.hpp +++ b/include/boost/test/data/monomorphic/generators/xrange.hpp @@ -49,7 +49,7 @@ namespace monomorphic { template class xrange_t { public: - typedef SampleType data_type; + typedef SampleType sample; xrange_t( SampleType const& begin, StepType const& step, data::size_t size ) : m_begin( begin ) @@ -159,7 +159,7 @@ struct make_xrange { //! //! @note the step size cannot be null, and it should be positive if @c begin_val < @c end_val, negative otherwise. template -inline monomorphic::generated_by > +inline monomorphic::generated_by> xrange( Params const& params ) { return monomorphic::ds_detail::make_xrange::_( params ); @@ -169,7 +169,7 @@ xrange( Params const& params ) /// @overload boost::unit_test::data::xrange() template -inline monomorphic::generated_by > +inline monomorphic::generated_by> xrange( SampleType const& end_val ) { return monomorphic::ds_detail::make_xrange::_( data::end=end_val ); @@ -179,7 +179,7 @@ xrange( SampleType const& end_val ) /// @overload boost::unit_test::data::xrange() template -inline typename enable_if_c::value,monomorphic::generated_by > >::type +inline typename enable_if_c::value,monomorphic::generated_by> >::type xrange( SampleType const& end_val, Params const& params ) { return monomorphic::ds_detail::make_xrange:: @@ -190,7 +190,7 @@ xrange( SampleType const& end_val, Params const& params ) /// @overload boost::unit_test::data::xrange() template -inline monomorphic::generated_by > +inline monomorphic::generated_by> xrange( SampleType const& begin_val, SampleType const& end_val ) { return monomorphic::ds_detail::make_xrange:: @@ -203,7 +203,7 @@ xrange( SampleType const& begin_val, SampleType const& end_val ) /// @overload boost::unit_test::data::xrange() template -inline monomorphic::generated_by > +inline monomorphic::generated_by> xrange( SampleType const& begin_val, SampleType const& end_val, StepType const& step_val ) { return monomorphic::ds_detail::make_xrange:: diff --git a/include/boost/test/data/monomorphic/grid.hpp b/include/boost/test/data/monomorphic/grid.hpp index b0918d26..3353a3a5 100644 --- a/include/boost/test/data/monomorphic/grid.hpp +++ b/include/boost/test/data/monomorphic/grid.hpp @@ -7,8 +7,8 @@ // ///@file /// Defines monomorphic dataset n+m dimentional *. Samples in this -/// dataset is grid of elements in DS1 and DS2. There will be total -/// |DS1| * |DS2| samples +/// dataset is grid of elements in DataSet1 and DataSet2. There will be total +/// |DataSet1| * |DataSet2| samples // *************************************************************************** #ifndef BOOST_TEST_DATA_MONOMORPHIC_GRID_HPP_101512GER @@ -85,82 +85,85 @@ struct grid_traits,T3> { //! Implements the dataset resulting from a cartesian product/grid operation on datasets. //! //! The arity of the resulting dataset is the sum of the arity of its operands. -template -class grid : public monomorphic::dataset::type::data_type, - typename boost::decay::type::data_type>::type> { - typedef typename boost::decay::type::data_type T1; - typedef typename boost::decay::type::data_type T2; +template +class grid : public monomorphic::dataset::type::sample, + typename boost::decay::type::sample>::type, + grid> { + typedef typename boost::decay::type dataset1_decay; + typedef typename boost::decay::type dataset2_decay; - typedef typename monomorphic::dataset::iter_ptr ds1_iter_ptr; - typedef typename monomorphic::dataset::iter_ptr ds2_iter_ptr; + typedef typename dataset1_decay::iterator dataset1_iter; + typedef typename dataset2_decay::iterator dataset2_iter; - typedef typename ds_detail::grid_traits::type T; - typedef monomorphic::dataset base; - typedef typename base::iter_ptr iter_ptr; + typedef typename dataset1_decay::sample sample1; + typedef typename dataset2_decay::sample sample2; - struct iterator : public base::iterator { - typedef typename monomorphic::traits::ref_type ref_type; +public: + typedef typename ds_detail::grid_traits::type sample; + + struct iterator { + typedef typename monomorphic::traits::ref_type ref_type; // Constructor - explicit iterator( ds1_iter_ptr iter1, DS2 const& ds2 ) - : m_iter1( iter1 ) - , m_iter2( ds2.begin() ) - , m_ds2( ds2 ) + explicit iterator( dataset1_iter iter1, DataSet2 const& ds2 ) + : m_iter1( std::move( iter1 ) ) + , m_iter2( std::move( ds2.begin() ) ) + , m_ds2( &ds2 ) , m_ds2_pos( 0 ) {} // forward iterator interface - virtual ref_type operator*() { return ds_detail::grid_traits::tuple_merge( **m_iter1, **m_iter2 ); } - virtual void operator++() + ref_type operator*() const { return ds_detail::grid_traits::tuple_merge( *m_iter1, *m_iter2 ); } + void operator++() { ++m_ds2_pos; - if( m_ds2_pos != m_ds2.size() ) - ++(*m_iter2); + if( m_ds2_pos != m_ds2->size() ) + ++m_iter2; else { m_ds2_pos = 0; - ++(*m_iter1); - m_iter2 = m_ds2.begin(); + ++m_iter1; + m_iter2 = std::move( m_ds2->begin() ); } } private: // Data members - ds1_iter_ptr m_iter1; - ds2_iter_ptr m_iter2; - DS2 const& m_ds2; + dataset1_iter m_iter1; + dataset2_iter m_iter2; + dataset2_decay const* m_ds2; data::size_t m_ds2_pos; }; public: - enum { arity = boost::decay::type::arity + boost::decay::type::arity }; + enum { arity = boost::decay::type::arity + boost::decay::type::arity }; //! Constructor - grid( DS1&& ds1, DS2&& ds2 ) - : m_ds1( std::forward( ds1 ) ) - , m_ds2( std::forward( ds2 ) ) + grid( DataSet1&& ds1, DataSet2&& ds2 ) + : m_ds1( std::forward( ds1 ) ) + , m_ds2( std::forward( ds2 ) ) {} //! Move constructor grid( grid&& j ) - : m_ds1( std::forward( j.m_ds1 ) ) - , m_ds2( std::forward( j.m_ds2 ) ) + : m_ds1( std::forward( j.m_ds1 ) ) + , m_ds2( std::forward( j.m_ds2 ) ) {} // dataset interface - virtual data::size_t size() const { return m_ds1.size() * m_ds2.size(); } - virtual iter_ptr begin() const { return boost::make_shared( m_ds1.begin(), m_ds2 ); } + data::size_t size() const { return m_ds1.size() * m_ds2.size(); } + iterator begin() const { return iterator( m_ds1.begin(), m_ds2 ); } private: // Data members - DS1 m_ds1; - DS2 m_ds2; + DataSet1 m_ds1; + DataSet2 m_ds2; }; //____________________________________________________________________________// // A grid dataset is a dataset -template -struct is_dataset > : mpl::true_ {}; +template +struct is_dataset> : mpl::true_ {}; //____________________________________________________________________________// @@ -176,42 +179,40 @@ struct grid { //____________________________________________________________________________// - - //! Grid operation -template -inline typename boost::lazy_enable_if_c::value && is_dataset::value, - result_of::grid,mpl::identity> +template +inline typename boost::lazy_enable_if_c::value && is_dataset::value, + result_of::grid,mpl::identity> >::type -operator*( DS1&& ds1, DS2&& ds2 ) +operator*( DataSet1&& ds1, DataSet2&& ds2 ) { - BOOST_TEST_DS_ASSERT( !ds1.size().is_inf() && !ds2.size().is_inf(), "Grid dimension can't have infinite size" ); + BOOST_TEST_DS_ASSERT( !ds1.size().is_inf() && !ds2.size().is_inf(), "Grid axes can't have infinite size" ); - return grid( std::forward( ds1 ), std::forward( ds2 ) ); + return grid( std::forward( ds1 ), std::forward( ds2 ) ); } //____________________________________________________________________________// //! @overload boost::unit_test::data::operator* -template -inline typename boost::lazy_enable_if_c::value && !is_dataset::value, - result_of::grid,data::result_of::make> +template +inline typename boost::lazy_enable_if_c::value && !is_dataset::value, + result_of::grid,data::result_of::make> >::type -operator*( DS1&& ds1, DS2&& ds2 ) +operator*( DataSet1&& ds1, DataSet2&& ds2 ) { - return std::forward(ds1) * data::make(std::forward(ds2)); + return std::forward(ds1) * data::make(std::forward(ds2)); } //____________________________________________________________________________// //! @overload boost::unit_test::data::operator* -template -inline typename boost::lazy_enable_if_c::value && is_dataset::value, - result_of::grid,mpl::identity> +template +inline typename boost::lazy_enable_if_c::value && is_dataset::value, + result_of::grid,mpl::identity> >::type -operator*( DS1&& ds1, DS2&& ds2 ) +operator*( DataSet1&& ds1, DataSet2&& ds2 ) { - return data::make(std::forward(ds1)) * std::forward(ds2); + return data::make(std::forward(ds1)) * std::forward(ds2); } } // namespace monomorphic diff --git a/include/boost/test/data/monomorphic/initializer_list.hpp b/include/boost/test/data/monomorphic/initializer_list.hpp index cafb33e4..fe6453c1 100644 --- a/include/boost/test/data/monomorphic/initializer_list.hpp +++ b/include/boost/test/data/monomorphic/initializer_list.hpp @@ -31,38 +31,22 @@ namespace monomorphic { /// Dataset view of a C array template -class init_list : public monomorphic::dataset { - typedef monomorphic::dataset base; - typedef typename base::iter_ptr iter_ptr; - - struct iterator : public base::iterator { - // Constructor - explicit iterator( T const* begin, data::size_t size ) - : m_it( begin ) - , m_singleton( size == 1 ) - {} - - // forward iterator interface - virtual T const& operator*() { return *m_it; } - virtual void operator++() { if( !m_singleton ) ++m_it; } - - private: - // Data members - T const* m_it; - bool m_singleton; - }; - +class init_list : public monomorphic::dataset> { public: + typedef T sample; + enum { arity = 1 }; - // Constructor + typedef T const* iterator; + + //! Constructor swallows initializer_list init_list( std::initializer_list&& il ) : m_data( std::forward>( il ) ) {} - // dataset interface - virtual data::size_t size() const { return m_data.size(); } - virtual iter_ptr begin() const { return boost::make_shared( m_data.begin(), m_data.size() ); } + //! dataset interface + data::size_t size() const { return m_data.size(); } + iterator begin() const { return m_data.begin(); } private: // Data members diff --git a/include/boost/test/data/monomorphic/join.hpp b/include/boost/test/data/monomorphic/join.hpp index 2cf30129..5450a4a5 100644 --- a/include/boost/test/data/monomorphic/join.hpp +++ b/include/boost/test/data/monomorphic/join.hpp @@ -33,107 +33,109 @@ namespace monomorphic { //! //! The size of the resulting dataset is the sum of the two underlying datasets. The arity of the datasets //! should match. -template -class join : public monomorphic::dataset::type::data_type> { - typedef typename boost::decay::type::data_type T; - typedef monomorphic::dataset base; - typedef typename base::iter_ptr iter_ptr; +template +class join : public monomorphic::dataset::type::sample, + join> { + typedef typename boost::decay::type dataset1_decay; + typedef typename boost::decay::type dataset2_decay; - struct iterator : public base::iterator { + typedef typename dataset1_decay::iterator dataset1_iter; + typedef typename dataset2_decay::iterator dataset2_iter; +public: + typedef typename dataset1_decay::sample sample; + + enum { arity = dataset1_decay::arity }; + + struct iterator { // Constructor - explicit iterator( iter_ptr it1, iter_ptr it2, data::size_t first_size ) - : m_it1( std::move(it1) ) - , m_it2( std::move(it2) ) + explicit iterator( dataset1_iter it1, dataset2_iter it2, data::size_t first_size ) + : m_it1( std::move( it1 ) ) + , m_it2( std::move( it2 ) ) , m_first_size( first_size ) {} // forward iterator interface - virtual T const& operator*() { return m_first_size > 0 ? **m_it1 : **m_it2; } - virtual void operator++() { m_first_size > 0 ? (--m_first_size,++(*m_it1)) : ++(*m_it2); } + sample const& operator*() const { return m_first_size > 0 ? *m_it1 : *m_it2; } + void operator++() { m_first_size > 0 ? (--m_first_size,++m_it1) : ++m_it2; } private: // Data members - iter_ptr m_it1; - iter_ptr m_it2; - data::size_t m_first_size; + dataset1_iter m_it1; + dataset2_iter m_it2; + data::size_t m_first_size; }; -public: - enum { arity = boost::decay::type::arity }; - - // Constructor - join( DS1&& ds1, DS2&& ds2 ) - : m_ds1( std::forward( ds1 ) ) - , m_ds2( std::forward( ds2 ) ) + //! Constructor + join( DataSet1&& ds1, DataSet2&& ds2 ) + : m_ds1( std::forward( ds1 ) ) + , m_ds2( std::forward( ds2 ) ) {} - // Move constructor + //! Move constructor join( join&& j ) - : m_ds1( std::forward( j.m_ds1 ) ) - , m_ds2( std::forward( j.m_ds2 ) ) + : m_ds1( std::forward( j.m_ds1 ) ) + , m_ds2( std::forward( j.m_ds2 ) ) {} - // dataset interface - virtual data::size_t size() const { return m_ds1.size() + m_ds2.size(); } - virtual iter_ptr begin() const { return boost::make_shared( m_ds1.begin(), - m_ds2.begin(), - m_ds1.size() ); } + //! dataset interface + data::size_t size() const { return m_ds1.size() + m_ds2.size(); } + iterator begin() const { return iterator( m_ds1.begin(), m_ds2.begin(), m_ds1.size() ); } private: // Data members - DS1 m_ds1; - DS2 m_ds2; + DataSet1 m_ds1; + DataSet2 m_ds2; }; //____________________________________________________________________________// // A joined dataset is a dataset. -template -struct is_dataset > : mpl::true_ {}; +template +struct is_dataset> : mpl::true_ {}; //____________________________________________________________________________// namespace result_of { //! Result type of the join operation on datasets. -template +template struct join { - typedef monomorphic::join type; + typedef monomorphic::join type; }; } // namespace result_of //____________________________________________________________________________// -template -inline typename boost::lazy_enable_if_c::value && is_dataset::value, - result_of::join,mpl::identity > +template +inline typename boost::lazy_enable_if_c::value && is_dataset::value, + result_of::join,mpl::identity> >::type -operator+( DS1&& ds1, DS2&& ds2 ) +operator+( DataSet1&& ds1, DataSet2&& ds2 ) { - return join( std::forward( ds1 ), std::forward( ds2 ) ); + return join( std::forward( ds1 ), std::forward( ds2 ) ); } //____________________________________________________________________________// -template -inline typename boost::lazy_enable_if_c::value && !is_dataset::value, - result_of::join,data::result_of::make > +template +inline typename boost::lazy_enable_if_c::value && !is_dataset::value, + result_of::join,data::result_of::make> >::type -operator+( DS1&& ds1, DS2&& ds2 ) +operator+( DataSet1&& ds1, DataSet2&& ds2 ) { - return std::forward(ds1) + data::make(std::forward(ds2)); + return std::forward( ds1 ) + data::make( std::forward( ds2 ) ); } //____________________________________________________________________________// -template -inline typename boost::lazy_enable_if_c::value && is_dataset::value, - result_of::join,mpl::identity > +template +inline typename boost::lazy_enable_if_c::value && is_dataset::value, + result_of::join,mpl::identity> >::type -operator+( DS1&& ds1, DS2&& ds2 ) +operator+( DataSet1&& ds1, DataSet2&& ds2 ) { - return data::make(std::forward(ds1)) + std::forward(ds2); + return data::make( std::forward(ds1) ) + std::forward( ds2 ); } } // namespace monomorphic diff --git a/include/boost/test/data/monomorphic/singleton.hpp b/include/boost/test/data/monomorphic/singleton.hpp index 9129b4f2..4a25b19b 100644 --- a/include/boost/test/data/monomorphic/singleton.hpp +++ b/include/boost/test/data/monomorphic/singleton.hpp @@ -31,40 +31,38 @@ namespace monomorphic { /// Models a single element data set template -class singleton : public monomorphic::dataset::type> { - typedef monomorphic::dataset::type> base; - typedef typename base::iter_ptr iter_ptr; +class singleton : public monomorphic::dataset::type, singleton> { +public: + typedef typename boost::decay::type sample; - struct iterator : public base::iterator { + enum { arity = 1 }; + + struct iterator { // Constructor - explicit iterator( singleton const& owner ) + explicit iterator( singleton const* owner ) : m_owner( owner ) {} // forward iterator interface - virtual typename base::data_type const& - operator*() { return m_owner.value(); } - virtual void operator++() {} + sample const& operator*() const { return m_owner->value(); } + void operator++() {} private: - singleton const& m_owner; + singleton const* m_owner; }; -public: - enum { arity = 1 }; - //! Constructor - explicit singleton( T&& value ) : m_value( std::forward( value ) ) {} + explicit singleton( T&& value ) : m_value( std::forward( value ) ) {} //! Move constructor singleton( singleton&& s ) : m_value( std::forward( s.m_value ) ) {} - // Access methods - T const& value() const { return m_value; } + //! Value access method + T const& value() const { return m_value; } - // dataset interface - virtual data::size_t size() const { return 1; } - virtual iter_ptr begin() const { return boost::make_shared( *this ); } + //! dataset interface + data::size_t size() const { return 1; } + iterator begin() const { return iterator( this ); } private: // Data members @@ -75,7 +73,7 @@ private: // a singleton is a dataset template -struct is_dataset > : mpl::true_ {}; +struct is_dataset> : mpl::true_ {}; //____________________________________________________________________________// diff --git a/include/boost/test/data/monomorphic/zip.hpp b/include/boost/test/data/monomorphic/zip.hpp index 29437476..aeb21e5c 100644 --- a/include/boost/test/data/monomorphic/zip.hpp +++ b/include/boost/test/data/monomorphic/zip.hpp @@ -79,82 +79,84 @@ struct zip_traits,T3> { //! //! A zip of two datasets is a dataset whose arity is the sum of the operand datasets arity. The size is given by //! the function creating the instance (see @c operator^ on datasets). -template -class zip : public monomorphic::dataset::type::data_type, - typename boost::decay::type::data_type>::type> { - typedef typename boost::decay::type::data_type T1; - typedef typename boost::decay::type::data_type T2; +template +class zip : public monomorphic::dataset::type::sample, + typename boost::decay::type::sample>::type, + zip> { + typedef typename boost::decay::type dataset1_decay; + typedef typename boost::decay::type dataset2_decay; - typedef typename monomorphic::dataset::iter_ptr ds1_iter_ptr; - typedef typename monomorphic::dataset::iter_ptr ds2_iter_ptr; + typedef typename dataset1_decay::iterator dataset1_iter; + typedef typename dataset2_decay::iterator dataset2_iter; - typedef typename ds_detail::zip_traits::type T; - typedef monomorphic::dataset base; - typedef typename base::iter_ptr iter_ptr; + typedef typename dataset1_decay::sample sample1; + typedef typename dataset2_decay::sample sample2; - struct iterator : public base::iterator { - typedef typename monomorphic::traits::ref_type ref_type; +public: + typedef typename ds_detail::zip_traits::type sample; + + enum { arity = dataset1_decay::arity + dataset2_decay::arity }; + + struct iterator { + typedef typename monomorphic::traits::ref_type ref_type; // Constructor - explicit iterator( ds1_iter_ptr iter1, ds2_iter_ptr iter2 ) - : m_iter1( iter1 ) - , m_iter2( iter2 ) + explicit iterator( dataset1_iter iter1, dataset2_iter iter2 ) + : m_iter1( std::move( iter1 ) ) + , m_iter2( std::move( iter2 ) ) {} // forward iterator interface - virtual ref_type operator*() { return ds_detail::zip_traits::tuple_merge( **m_iter1, **m_iter2 ); } - virtual void operator++() { ++(*m_iter1); ++(*m_iter2); } + ref_type operator*() const { return ds_detail::zip_traits::tuple_merge( *m_iter1, *m_iter2 ); } + void operator++() { ++m_iter1; ++m_iter2; } private: // Data members - ds1_iter_ptr m_iter1; - ds2_iter_ptr m_iter2; + dataset1_iter m_iter1; + dataset2_iter m_iter2; }; -public: - enum { arity = boost::decay::type::arity + boost::decay::type::arity }; - //! Constructor //! //! The datasets are moved and not copied. - zip( DS1&& ds1, DS2&& ds2, data::size_t size ) - : m_ds1( std::forward( ds1 ) ) - , m_ds2( std::forward( ds2 ) ) + zip( DataSet1&& ds1, DataSet2&& ds2, data::size_t size ) + : m_ds1( std::forward( ds1 ) ) + , m_ds2( std::forward( ds2 ) ) , m_size( size ) {} //! Move constructor zip( zip&& j ) - : m_ds1( std::forward( j.m_ds1 ) ) - , m_ds2( std::forward( j.m_ds2 ) ) + : m_ds1( std::forward( j.m_ds1 ) ) + , m_ds2( std::forward( j.m_ds2 ) ) , m_size( j.m_size ) {} // dataset interface - virtual data::size_t size() const { return m_size; } - virtual iter_ptr begin() const { return boost::make_shared( m_ds1.begin(), m_ds2.begin() ); } + data::size_t size() const { return m_size; } + iterator begin() const { return iterator( m_ds1.begin(), m_ds2.begin() ); } private: // Data members - DS1 m_ds1; - DS2 m_ds2; + DataSet1 m_ds1; + DataSet2 m_ds2; data::size_t m_size; }; //____________________________________________________________________________// //! Zipped datasets results in a dataset. -template -struct is_dataset > : mpl::true_ {}; +template +struct is_dataset> : mpl::true_ {}; //____________________________________________________________________________// namespace ds_detail { //! Handles the sise of the resulting zipped dataset. -template +template inline data::size_t -zip_size( DS1&& ds1, DS2&& ds2 ) +zip_size( DataSet1&& ds1, DataSet2&& ds2 ) { data::size_t ds1_size = ds1.size(); data::size_t ds2_size = ds2.size(); @@ -188,39 +190,39 @@ struct zip { //____________________________________________________________________________// //! Overload operator for zip support -template -inline typename boost::lazy_enable_if_c::value && is_dataset::value, - result_of::zip,mpl::identity> +template +inline typename boost::lazy_enable_if_c::value && is_dataset::value, + result_of::zip,mpl::identity> >::type -operator^( DS1&& ds1, DS2&& ds2 ) +operator^( DataSet1&& ds1, DataSet2&& ds2 ) { - return zip( std::forward( ds1 ), - std::forward( ds2 ), - ds_detail::zip_size( ds1, ds2 ) ); + return zip( std::forward( ds1 ), + std::forward( ds2 ), + ds_detail::zip_size( ds1, ds2 ) ); } //____________________________________________________________________________// //! @overload boost::unit_test::data::monomorphic::operator^() -template -inline typename boost::lazy_enable_if_c::value && !is_dataset::value, - result_of::zip,data::result_of::make> +template +inline typename boost::lazy_enable_if_c::value && !is_dataset::value, + result_of::zip,data::result_of::make> >::type -operator^( DS1&& ds1, DS2&& ds2 ) +operator^( DataSet1&& ds1, DataSet2&& ds2 ) { - return std::forward(ds1) ^ data::make(std::forward(ds2)); + return std::forward( ds1 ) ^ data::make( std::forward( ds2 ) ); } //____________________________________________________________________________// //! @overload boost::unit_test::data::monomorphic::operator^() -template -inline typename boost::lazy_enable_if_c::value && is_dataset::value, - result_of::zip,mpl::identity> +template +inline typename boost::lazy_enable_if_c::value && is_dataset::value, + result_of::zip,mpl::identity> >::type -operator^( DS1&& ds1, DS2&& ds2 ) +operator^( DataSet1&& ds1, DataSet2&& ds2 ) { - return data::make(std::forward(ds1)) ^ std::forward(ds2); + return data::make( std::forward( ds1 ) ) ^ std::forward( ds2 ); } } // namespace monomorphic diff --git a/test/test-organization-ts/datasets-test/mono-grid-test.cpp b/test/test-organization-ts/datasets-test/mono-grid-test.cpp index 1e012024..9ce1a05f 100644 --- a/test/test-organization-ts/datasets-test/mono-grid-test.cpp +++ b/test/test-organization-ts/datasets-test/mono-grid-test.cpp @@ -15,7 +15,7 @@ #include #include #include -#include +//#include namespace data = boost::unit_test::data; @@ -36,6 +36,7 @@ BOOST_AUTO_TEST_CASE( test_mono_grid_size_and_composition ) //____________________________________________________________________________// +#if 0 BOOST_AUTO_TEST_CASE( test_mono_grid_with_xrange ) { auto ds1 = data::make(1); @@ -45,6 +46,8 @@ BOOST_AUTO_TEST_CASE( test_mono_grid_with_xrange ) BOOST_TEST( (ds1 * ds2).size() == 5 ); } +#endif + //____________________________________________________________________________// BOOST_AUTO_TEST_CASE( test_mono_grid_cpp11_features ) diff --git a/test/test-organization-ts/datasets-test/random-test.cpp b/test/test-organization-ts/datasets-test/random-test.cpp index 115225b4..f6b231c5 100644 --- a/test/test-organization-ts/datasets-test/random-test.cpp +++ b/test/test-organization-ts/datasets-test/random-test.cpp @@ -72,7 +72,7 @@ BOOST_AUTO_TEST_CASE( test_parameterized_init ) BOOST_TEST(( std::is_same>::value )); - BOOST_TEST(( std::is_same::value )); + BOOST_TEST(( std::is_same::value )); BOOST_TEST(( std::is_same::value )); @@ -81,7 +81,7 @@ BOOST_AUTO_TEST_CASE( test_parameterized_init ) BOOST_TEST(( std::is_same>::value )); - BOOST_TEST(( std::is_same::value )); + BOOST_TEST(( std::is_same::value )); BOOST_TEST(( std::is_same::value )); @@ -90,7 +90,7 @@ BOOST_AUTO_TEST_CASE( test_parameterized_init ) BOOST_TEST(( std::is_same>::value )); - BOOST_TEST(( std::is_same::value )); + BOOST_TEST(( std::is_same::value )); BOOST_TEST(( std::is_same::value )); @@ -99,7 +99,7 @@ BOOST_AUTO_TEST_CASE( test_parameterized_init ) BOOST_TEST(( std::is_same>::value )); - BOOST_TEST(( std::is_same::value )); + BOOST_TEST(( std::is_same::value )); BOOST_TEST(( std::is_same::value )); @@ -121,7 +121,7 @@ BOOST_AUTO_TEST_CASE( test_parameterized_init ) BOOST_TEST(( std::is_same>::value )); - BOOST_TEST(( std::is_same::value )); + BOOST_TEST(( std::is_same::value )); BOOST_TEST(( std::is_same::value )); }