From 29a9216fabdaf7b3d8cf242854925e5e26de054d Mon Sep 17 00:00:00 2001 From: Sean Parent Date: Mon, 2 Dec 2024 11:43:38 -0800 Subject: [PATCH 01/14] Update code base to pass clang-tidy (#552) * A few clang-tidy catches. * Buildable checkpoint * Check point. * Checkpoint - building * Final clang-tidy pass. * Removing some explicit `NOLINT` --- CMakePresets.json | 4 +-- stlab/concurrency/channel.hpp | 30 ++++++++-------- stlab/concurrency/future.hpp | 45 ++++++++++++------------ stlab/concurrency/ready_future.hpp | 12 +++---- stlab/concurrency/task.hpp | 2 ++ stlab/forest.hpp | 42 ++++++++++++---------- stlab/forest_algorithms.hpp | 10 +++--- stlab/iterator/set_next.hpp | 9 ++--- test/forest_test.cpp | 10 +++--- test/future_recover_tests.cpp | 8 ++--- test/future_when_any_arguments_tests.cpp | 20 +++++------ test/tuple_test.cpp | 8 +++-- test/utility_test.cpp | 2 ++ 13 files changed, 105 insertions(+), 97 deletions(-) diff --git a/CMakePresets.json b/CMakePresets.json index fb7cfa18..8d7c291c 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -72,7 +72,7 @@ "CMAKE_CXX_STANDARD": "17", "CMAKE_BUILD_TYPE": "DEBUG", "BUILD_TESTING": "ON", - "CMAKE_CXX_CLANG_TIDY": "clang-tidy;--fix" + "CMAKE_CXX_CLANG_TIDY": "clang-tidy;--fix;-header-filter=stlab/.*" } }, { @@ -84,7 +84,7 @@ "CMAKE_CXX_STANDARD": "17", "CMAKE_BUILD_TYPE": "DEBUG", "BUILD_TESTING": "ON", - "CMAKE_CXX_CLANG_TIDY": "clang-tidy" + "CMAKE_CXX_CLANG_TIDY": "clang-tidy;-header-filter=stlab/.*" } } ], diff --git a/stlab/concurrency/channel.hpp b/stlab/concurrency/channel.hpp index b4cb1389..b27e3d75 100644 --- a/stlab/concurrency/channel.hpp +++ b/stlab/concurrency/channel.hpp @@ -71,7 +71,7 @@ constexpr process_state_scheduled yield_immediate{process_state::yield, enum class channel_error_codes : std::uint8_t { // names for channel errors broken_channel = 1, process_already_running = 2, - no_state + no_state = 3 }; /**************************************************************************************************/ @@ -761,8 +761,8 @@ struct shared_process shared_process_sender_helper, Args...>( *this), _executor(std::forward(e)), _process(std::forward(f)) { - _sender_count = std::is_same::value ? 0 : 1; - _receiver_count = !std::is_same::value; + _sender_count = std::is_same_v ? 0 : 1; + _receiver_count = !std::is_same_v; } template @@ -772,16 +772,16 @@ struct shared_process _executor(std::forward(e)), _process(std::forward(f)), _upstream(std::forward(u)...) { _sender_count = sizeof...(Args); - _receiver_count = !std::is_same::value; + _receiver_count = !std::is_same_v; } void add_receiver() override { - if (std::is_same::value) return; + if (std::is_same_v) return; ++_receiver_count; } void remove_receiver() override { - if (std::is_same::value) return; + if (std::is_same_v) return; /* NOTE (sparent) : Decrementing the receiver count can allow this to start running on a send before we can get to the check - so we need to see if we are already running @@ -792,7 +792,7 @@ struct shared_process bool do_run; { std::unique_lock lock(_process_mutex); - do_run = ((!_queue.empty() || std::is_same, void>::value) || + do_run = ((!_queue.empty() || std::is_same_v, void>) || _process_close_queue) && !_process_running; _process_running = _process_running || do_run; @@ -1313,24 +1313,24 @@ template /**************************************************************************************************/ template -auto merge_channel(S s, F f, R... upstream_receiver) { - return detail::channel_combiner::merge_helper(std::move(s), std::move(f), - std::move(upstream_receiver)...); +auto merge_channel(S s, F f, R&&... upstream_receiver) { + return detail::channel_combiner::merge_helper(std::move(s), std::move(f), + std::forward(upstream_receiver)...); } /**************************************************************************************************/ template -auto zip_with(S s, F f, R... upstream_receiver) { - return detail::channel_combiner::merge_helper( - std::move(s), std::move(f), std::forward(upstream_receiver)...); +auto zip_with(S s, F f, const R&... upstream_receiver) { + return detail::channel_combiner::merge_helper(std::move(s), std::move(f), + upstream_receiver...); } /**************************************************************************************************/ template -auto zip(S s, R... r) { - return zip_with(std::move(s), detail::zip_helper{}, std::move(r)...); +auto zip(S s, const R&... r) { + return zip_with(std::move(s), detail::zip_helper{}, r...); } // template diff --git a/stlab/concurrency/future.hpp b/stlab/concurrency/future.hpp index 8e589184..d88bf24f 100644 --- a/stlab/concurrency/future.hpp +++ b/stlab/concurrency/future.hpp @@ -993,7 +993,7 @@ auto package(E executor, F&& f) try { std::move(r).detach([_p = std::move(promise)](auto&& f) mutable noexcept { if (auto e = f.exception()) { - std::move(_p).set_exception(std::move(e)); + std::move(_p).set_exception(e); } else { std::move(_p).set_value(invoke_void_to_monostate_result( [&] { return std::forward(f).get_ready(); })); @@ -1044,7 +1044,7 @@ namespace detail { template struct assign_ready_future { template - static void assign(T& x, F f) { + static void assign(T& x, F&& f) { x = std::move(*(std::move(f).get_try())); } }; @@ -1067,13 +1067,14 @@ struct when_all_shared { std::exception_ptr _exception; packaged_task<> _f; + // require f is sink. template - void done(FF&& f) { + auto done(FF&& f) -> std::enable_if_t> { auto run{false}; { std::unique_lock lock{_guard}; if (!_exception) { - assign_ready_future::assign(std::get(_args), std::forward(f)); + assign_ready_future::assign(std::get(_args), std::move(f)); if (--_remaining == 0) run = true; } } @@ -1181,7 +1182,7 @@ struct when_any_shared { } }; -inline void rethrow_if_false(bool x, std::exception_ptr& p) { +inline void rethrow_if_false(bool x, const std::exception_ptr& p) { if (!x) std::rethrow_exception(p); } @@ -1212,12 +1213,12 @@ auto apply_when_any_arg(F& f, P& p) { template void attach_when_arg_(E&& executor, std::shared_ptr

& shared, T a) { auto holds = - std::move(a).recover(std::forward(executor), [_w = std::weak_ptr

(shared)](auto x) { + std::move(a).recover(std::forward(executor), [_w = std::weak_ptr

(shared)](auto&& x) { auto p = _w.lock(); if (!p) return; if (auto ex = x.exception()) { - p->failure(ex); + p->failure(std::move(ex)); } else { p->template done(std::move(x)); } @@ -1243,7 +1244,7 @@ void attach_when_args(E&& executor, std::shared_ptr

& p, Ts... a) { /**************************************************************************************************/ template -auto when_all(E executor, F f, future... args) { +auto when_all(const E& executor, F f, future... args) { using vt_t = voidless_tuple; using opt_t = optional_placeholder_tuple; using result_t = decltype(apply_ignore_placeholders(std::declval(), std::declval())); @@ -1263,7 +1264,7 @@ auto when_all(E executor, F f, future... args) { template struct make_when_any { template - static auto make(E executor, F f, future arg, future... args) { + static auto make(const E& executor, F f, future arg, future... args) { using result_t = detail::result_t; auto shared = std::make_shared>(); @@ -1283,7 +1284,7 @@ struct make_when_any { template <> struct make_when_any { template - static auto make(E executor, F&& f, future... args) { + static auto make(E&& executor, F&& f, future... args) { using result_t = detail::result_t; auto shared = std::make_shared>(); @@ -1292,7 +1293,7 @@ struct make_when_any { }); shared->_f = std::move(p.first); - detail::attach_when_args(executor, shared, std::move(args)...); + detail::attach_when_args(std::forward(executor), shared, std::move(args)...); return std::move(p.second); } @@ -1301,8 +1302,8 @@ struct make_when_any { /**************************************************************************************************/ template -auto when_any(E executor, F&& f, future arg, future... args) { - return make_when_any::make(std::move(executor), std::forward(f), std::move(arg), +auto when_any(E&& executor, F&& f, future&& arg, future&&... args) { + return make_when_any::make(std::forward(executor), std::forward(f), std::move(arg), std::move(args)...); } @@ -1497,13 +1498,13 @@ struct common_context : CR { /**************************************************************************************************/ template -void attach_tasks(size_t index, E executor, const std::shared_ptr& context, T&& a) { +void attach_tasks(size_t index, E&& executor, const std::shared_ptr& context, T&& a) { auto&& hold = std::forward(a).recover( - std::move(executor), [_context = make_weak_ptr(context), _i = index](auto x) { + std::forward(executor), [_context = make_weak_ptr(context), _i = index](const auto& x) { auto p = _context.lock(); if (!p) return; if (auto ex = x.exception()) { - p->failure(ex, _i); + p->failure(std::move(ex), _i); } else { p->done(std::move(x), _i); } @@ -1519,7 +1520,7 @@ struct create_range_of_futures; template struct create_range_of_futures> { template - static auto do_it(E executor, F&& f, I first, I last) { + static auto do_it(const E& executor, F&& f, I first, I last) { assert(first != last); auto context = std::make_shared(std::forward(f), std::distance(first, last)); @@ -1539,7 +1540,7 @@ struct create_range_of_futures> { template struct create_range_of_futures> { template - static auto do_it(E executor, F&& f, I first, I last) { + static auto do_it(const E& executor, F&& f, I first, I last) { assert(first != last); auto context = std::make_shared(std::forward(f), std::distance(first, last)); @@ -1566,7 +1567,7 @@ template // models ForwardIterator that reference to a range of futures of the same // type -auto when_all(E executor, F f, std::pair range) { +auto when_all(const E& executor, F f, std::pair range) { using param_t = typename std::iterator_traits::value_type::result_type; using result_t = typename detail::result_of_when_all_t::result_type; using context_result_t = @@ -1591,7 +1592,7 @@ template // models ForwardIterator that reference to a range of futures of the same // type -auto when_any(E executor, F&& f, std::pair range) { +auto when_any(const E& executor, F&& f, std::pair range) { using param_t = typename std::iterator_traits::value_type::result_type; using result_t = typename detail::result_of_when_any_t::result_type; using context_result_t = std::conditional_t, void, param_t>; @@ -1618,14 +1619,14 @@ auto when_any(E executor, F&& f, std::pair range) { #endif template -auto async(E executor, F&& f, Args&&... args) +auto async(const E& executor, F&& f, Args&&... args) -> detail::reduced_t, std::decay_t...>> { using result_type = detail::result_t, std::decay_t...>; auto [pro, fut] = package( executor, [f = std::forward(f), args = std::make_tuple(std::forward(args)...)]() mutable - -> result_type { return std::apply(std::move(f), std::move(args)); }); + -> result_type { return std::apply(std::move(f), std::move(args)); }); executor(std::move(pro)); diff --git a/stlab/concurrency/ready_future.hpp b/stlab/concurrency/ready_future.hpp index ef77f77a..95b3dabe 100644 --- a/stlab/concurrency/ready_future.hpp +++ b/stlab/concurrency/ready_future.hpp @@ -44,10 +44,10 @@ namespace detail { template struct _make_exceptional_future { template - auto operator()(std::exception_ptr error, E executor) const -> future { + auto operator()(const std::exception_ptr& error, E executor) const -> future { auto p = package(std::move(executor), [](auto&& a) { return std::forward(a); }); - p.first.set_exception(std::move(error)); + p.first.set_exception(error); return std::move(p.second); } }; @@ -55,9 +55,9 @@ struct _make_exceptional_future { template <> struct _make_exceptional_future { template - auto operator()(std::exception_ptr error, E executor) const -> future { + auto operator()(const std::exception_ptr& error, E executor) const -> future { auto p = package(std::move(executor), []() {}); - p.first.set_exception(std::move(error)); + p.first.set_exception(error); return std::move(p.second); } }; @@ -65,8 +65,8 @@ struct _make_exceptional_future { } // namespace detail template -auto make_exceptional_future(std::exception_ptr error, E executor) -> future { - return detail::_make_exceptional_future{}(std::move(error), std::move(executor)); +auto make_exceptional_future(const std::exception_ptr& error, E executor) -> future { + return detail::_make_exceptional_future{}(error, std::move(executor)); } /**************************************************************************************************/ diff --git a/stlab/concurrency/task.hpp b/stlab/concurrency/task.hpp index cf07053a..4e4e5416 100644 --- a/stlab/concurrency/task.hpp +++ b/stlab/concurrency/task.hpp @@ -82,6 +82,7 @@ class task_ { signature to the actual captured model. */ + // NOLINTNEXTLINE(performance-unnecessary-value-param) static auto invoke(void* self, Args... args) noexcept(NoExcept) -> R { return (static_cast(self)->_f)(std::forward(args)...); } @@ -145,6 +146,7 @@ class task_ { // empty (default) vtable static void dtor(void*) noexcept {} static void move_ctor(void*, void*) noexcept {} + // NOLINTNEXTLINE(performance-unnecessary-value-param) static auto invoke(void*, Args...) noexcept(NoExcept) -> R { if constexpr (NoExcept) { try { diff --git a/stlab/forest.hpp b/stlab/forest.hpp index 19abbfe7..c3c2b4ae 100644 --- a/stlab/forest.hpp +++ b/stlab/forest.hpp @@ -106,7 +106,7 @@ struct child_iterator { using iterator_category = typename std::iterator_traits::iterator_category; child_iterator() = default; - explicit child_iterator(I x) : _x(std::move(x)) {} + explicit child_iterator(const I& x) : _x(std::move(x)) {} template child_iterator(const child_iterator& u) : _x(u.base()) {} @@ -182,7 +182,7 @@ struct edge_iterator { using iterator_category = typename std::iterator_traits::iterator_category; edge_iterator() = default; - explicit edge_iterator(I x) : _x(find_edge(x, Edge)) {} + explicit edge_iterator(const I& x) : _x(find_edge(x, Edge)) {} template edge_iterator(const edge_iterator& u) : _x(u.base()) {} @@ -882,17 +882,18 @@ class forest { erase(--end()); } - auto insert(iterator position, const_child_iterator first, const_child_iterator last) - -> iterator; + auto insert(iterator position, + const const_child_iterator& first, + const const_child_iterator& last) -> iterator; - auto splice(iterator position, forest& x) -> iterator; - auto splice(iterator position, forest& x, iterator i) -> iterator; - auto splice(iterator position, forest& x, child_iterator first, child_iterator last) + auto splice(const iterator& position, forest& x) -> iterator; + auto splice(const iterator& position, forest& x, iterator i) -> iterator; + auto splice(const iterator& position, forest& x, child_iterator first, child_iterator last) -> iterator; - auto splice(iterator position, + auto splice(const iterator& position, forest& x, - child_iterator first, - child_iterator last, + const child_iterator& first, + const child_iterator& last, size_type count) -> iterator; auto insert_parent(child_iterator front, child_iterator back, const T& x) -> iterator; @@ -937,7 +938,7 @@ namespace unsafe { template // I models a FullorderIterator struct set_next_fn> { - void operator()(child_iterator x, child_iterator y) { + void operator()(const child_iterator& x, const child_iterator& y) { unsafe::set_next(pivot_of(x.base()), y.base()); } }; @@ -1014,7 +1015,7 @@ auto forest::erase(const iterator& position) -> iterator { /**************************************************************************************************/ template -auto forest::splice(iterator position, forest& x) -> iterator { +auto forest::splice(const iterator& position, forest& x) -> iterator { return splice(position, x, child_iterator(x.begin()), child_iterator(x.end()), x.size_valid() ? x.size() : 0); } @@ -1022,7 +1023,7 @@ auto forest::splice(iterator position, forest& x) -> iterator { /**************************************************************************************************/ template -auto forest::splice(iterator position, forest& x, iterator i) -> +auto forest::splice(const iterator& position, forest& x, iterator i) -> typename forest::iterator { i.edge() = forest_edge::leading; return splice(position, x, child_iterator(i), ++child_iterator(i), has_children(i) ? 0 : 1); @@ -1031,7 +1032,8 @@ auto forest::splice(iterator position, forest& x, iterator i) -> /**************************************************************************************************/ template -auto forest::insert(iterator pos, const_child_iterator f, const_child_iterator l) -> iterator { +auto forest::insert(iterator pos, const const_child_iterator& f, const const_child_iterator& l) + -> iterator { for (const_iterator first(f.base()), last(l.base()); first != last; ++first, ++pos) { if (is_leading(first)) pos = insert(pos, *first); } @@ -1042,9 +1044,11 @@ auto forest::insert(iterator pos, const_child_iterator f, const_child_iterato /**************************************************************************************************/ template -auto forest::splice( - iterator pos, forest& x, child_iterator first, child_iterator last, size_type count) - -> iterator { +auto forest::splice(const iterator& pos, + forest& x, + const child_iterator& first, + const child_iterator& last, + size_type count) -> iterator { if (first == last || first.base() == pos) return pos; if (&x != this) { @@ -1070,8 +1074,8 @@ auto forest::splice( /**************************************************************************************************/ template -auto forest::splice(iterator pos, forest& x, child_iterator first, child_iterator last) -> - typename forest::iterator { +auto forest::splice(const iterator& pos, forest& x, child_iterator first, child_iterator last) + -> typename forest::iterator { return splice(pos, x, first, last, 0); } diff --git a/stlab/forest_algorithms.hpp b/stlab/forest_algorithms.hpp index 3c6e2920..9ec98378 100644 --- a/stlab/forest_algorithms.hpp +++ b/stlab/forest_algorithms.hpp @@ -40,7 +40,7 @@ struct transcribe_iterator { using reference = void; using container_type = Container; - transcribe_iterator(Container& c, typename Container::iterator i) : _c{&c}, _i{std::move(i)} {} + transcribe_iterator(Container& c, const typename Container::iterator& i) : _c{&c}, _i{i} {} constexpr auto operator*() -> auto& { return *this; } constexpr auto operator++() -> auto& { @@ -78,7 +78,7 @@ auto transcriber(Container& c) { /**************************************************************************************************/ template -auto transcribe(I first, I last, O out, P proj, UP pred) { +auto transcribe(I first, const I& last, O out, P proj, UP pred) { for (; first != last; ++first, ++out) { if (pred(first)) { out = proj(*first); @@ -96,8 +96,8 @@ auto transcribe(const R& range, O out, P proj, UP pred) { } template -auto transcribe(I first, I last, O out, P proj) { - return transcribe(std::move(first), std::move(last), std::move(out), std::move(proj), +auto transcribe(const I& first, const I& last, O out, P proj) { + return transcribe(first, last, std::move(out), std::move(proj), [](const auto& p) { return is_leading(p); }); } @@ -110,7 +110,7 @@ auto transcribe(const R& range, O out, P proj) { template // models OutputIterator -auto flatten(I first, I last, O out) { +auto flatten(I first, const I& last, O out) { for (; first != last; ++first) { if (is_leading(first)) { *out++ = *first; diff --git a/stlab/iterator/set_next.hpp b/stlab/iterator/set_next.hpp index 58a0909a..bca765ef 100644 --- a/stlab/iterator/set_next.hpp +++ b/stlab/iterator/set_next.hpp @@ -9,10 +9,7 @@ #define STLAB_ITERATOR_SET_NEXT_HPP #include - -/**************************************************************************************************/ - - +#include /**************************************************************************************************/ @@ -26,7 +23,7 @@ struct set_next_fn; // Must be specialized /**************************************************************************************************/ template // I models NodeIterator -inline void set_next(I x, I y) { +inline void set_next(const I& x, const I& y) { set_next_fn()(x, y); } @@ -55,8 +52,6 @@ inline void skip_node(I location) { /**************************************************************************************************/ - - /**************************************************************************************************/ #endif // STLAB_ITERATOR_SET_NEXT_HPP diff --git a/test/forest_test.cpp b/test/forest_test.cpp index 0b4ce36d..34b02f54 100644 --- a/test/forest_test.cpp +++ b/test/forest_test.cpp @@ -1,8 +1,8 @@ /**************************************************************************************************/ // stdc++ -#include #include +#include #include #include #include @@ -158,7 +158,7 @@ auto to_string(const R& r) { } template -auto to_string(I first, I last) { +auto to_string(I first, const I& last) { std::string result; while (first != last) { result += *first++; @@ -169,14 +169,16 @@ auto to_string(I first, I last) { /**************************************************************************************************/ template -void test_fullorder_traversal(Iterator first, Iterator last, const std::string& expected) { +void test_fullorder_traversal(const Iterator& first, + const Iterator& last, + const std::string& expected) { BOOST_CHECK(to_string(first, last) == expected); } /**************************************************************************************************/ template -auto test_edge_traversal(Forest& f, Iterator fi, Iterator li) { +auto test_edge_traversal(Forest& f, const Iterator& fi, const Iterator& li) { std::string expected; { diff --git a/test/future_recover_tests.cpp b/test/future_recover_tests.cpp index aacbfb9d..885b8347 100644 --- a/test/future_recover_tests.cpp +++ b/test/future_recover_tests.cpp @@ -430,7 +430,7 @@ BOOST_AUTO_TEST_CASE(future_recover_failure_during_when_all_on_lvalue) { sut = when_all( make_executor<0>(), [](int x, int y) { return x + y; }, f1, f2) - .recover([](auto error) { + .recover([](const auto& error) { if (error.exception()) { return 815; } @@ -449,7 +449,7 @@ BOOST_AUTO_TEST_CASE(future_recover_failure_during_when_all_on_lvalue) { sut = (when_all( make_executor<0>(), [](int x, int y) { return x + y; }, f1, f2) ^ - [](auto error) { + [](const auto& error) { if (error.exception()) { return 815; } @@ -1140,7 +1140,7 @@ BOOST_AUTO_TEST_CASE(future_recover_move_only_with_broken_promise) { sut = [&check]() { auto p{ package(immediate_executor, [](move_only x) { return x; })}; - return std::move(p.second).recover([&check](auto f) { + return std::move(p.second).recover([&check](const auto& f) { check = true; try { return *std::move(f.get_try()); @@ -1158,7 +1158,7 @@ BOOST_AUTO_TEST_CASE(future_recover_move_only_with_broken_promise) { sut = [&check]() { auto p{ package(immediate_executor, [](move_only x) { return x; })}; - return std::move(p.second) ^ [&check](auto f) { + return std::move(p.second) ^ [&check](const auto& f) { check = true; try { return *std::move(f.get_try()); diff --git a/test/future_when_any_arguments_tests.cpp b/test/future_when_any_arguments_tests.cpp index fc90c520..992430f9 100644 --- a/test/future_when_any_arguments_tests.cpp +++ b/test/future_when_any_arguments_tests.cpp @@ -38,7 +38,7 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_void_range_with_one_argument) { _i = index; _r = x; }, - a1); + std::move(a1)); check_valid_future(sut); wait_until_future_completed(std::move(sut)); @@ -81,7 +81,7 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_void_range_with_many_arguments_first_su ++_counter; _r = x; }, - a1, a2, a3, a4); + std::move(a1), std::move(a2), std::move(a3), std::move(a4)); check_valid_future(sut); wait_until_future_completed(std::move(sut)); @@ -131,7 +131,7 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_void_argument_with_many_arguments_middl ++_counter; _r = x; }, - a1, a2, a3, a4); + std::move(a1), std::move(a2), std::move(a3), std::move(a4)); check_valid_future(sut); wait_until_future_completed(std::move(sut)); @@ -180,7 +180,7 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_void_argument_with_many_arguments_last_ ++_counter; _r = x; }, - a1, a2, a3, a4); + std::move(a1), std::move(a2), std::move(a3), std::move(a4)); check_valid_future(sut); wait_until_future_completed(std::move(sut)); @@ -219,7 +219,7 @@ BOOST_AUTO_TEST_CASE( _i = index; _result = x; }, - a1, a2, a3, a4); + std::move(a1), std::move(a2), std::move(a3), std::move(a4)); check_valid_future(sut); wait_until_future_completed(std::move(sut)); @@ -249,7 +249,7 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_void_arguments_with_many_arguments_all_ _i = index; _r = x; }, - a1, a2, a3, a4); + std::move(a1), std::move(a2), std::move(a3), std::move(a4)); wait_until_all_tasks_completed(); wait_until_future_fails(std::move(sut)); @@ -275,7 +275,7 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_int_argument_with_one_argument) { _i = index; return x; }, - a1); + std::move(a1)); check_valid_future(sut); auto result = await(std::move(sut)); @@ -318,7 +318,7 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_int_arguments_with_many_arguments_last_ ++_counter; return x; }, - a1, a2, a3, a4); + std::move(a1), std::move(a2), std::move(a3), std::move(a4)); check_valid_future(sut); wait_until_future_completed(copy(sut)); block_context._go = true; @@ -367,7 +367,7 @@ BOOST_AUTO_TEST_CASE( _index = index; return x; }, - a1, a2, a3, a4); + std::move(a1), std::move(a2), std::move(a3), std::move(a4)); check_valid_future(sut); auto result = await(std::move(sut)); @@ -419,7 +419,7 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_arguments_with_diamond_formation_argume _i = index; return x; }, - a1, a2, a3, a4); + std::move(a1), std::move(a2), std::move(a3), std::move(a4)); check_valid_future(sut); wait_until_future_completed(copy(sut)); diff --git a/test/tuple_test.cpp b/test/tuple_test.cpp index 8231ecf4..576709b7 100644 --- a/test/tuple_test.cpp +++ b/test/tuple_test.cpp @@ -88,7 +88,7 @@ BOOST_AUTO_TEST_CASE(add_placeholder_test) { /**************************************************************************************************/ template -void when_all_typecheck(F, future...) { +void when_all_typecheck(F, const future&...) { using pt_t = placeholder_tuple; using opt_t = optional_placeholder_tuple; using vt_t = voidless_tuple; @@ -186,8 +186,10 @@ BOOST_AUTO_TEST_CASE(future_when_all_int_void_string_void_bool_void) { auto f = when_all( stlab::default_executor, - [](auto... args) { for_each_argument([](auto x) { cout << x << "\n"; }, args...); }, fi(), - fv(), fs(), fv(), fb(), fv()); + [](const auto&... args) { + for_each_argument([](const auto& x) { cout << x << "\n"; }, args...); + }, + fi(), fv(), fs(), fv(), fb(), fv()); await(std::move(f)); } diff --git a/test/utility_test.cpp b/test/utility_test.cpp index 8d9b5a04..c9d43edc 100644 --- a/test/utility_test.cpp +++ b/test/utility_test.cpp @@ -9,9 +9,11 @@ #include #include +#include // boost #include + #include /**************************************************************************************************/ From 2821828cd4635fff1adbeee1c86d3940ec932d3a Mon Sep 17 00:00:00 2001 From: Sean Parent Date: Mon, 2 Dec 2024 17:29:52 -0800 Subject: [PATCH 02/14] Reworking reduction (#551) * Reworking reduction Reworked reduction to connect cancelation to the secondary task (it was detached in the prior version). As a side benefit, I eliminated double-type erasure on all packaged tasks, reducing the invocation overhead and eliminating a heap allocation for large tasks. Added unit test for future reduction cancelation. --- CMakePresets.json | 221 +++++++++++--------- stlab/concurrency/future.hpp | 376 +++++++++++++++++------------------ test/future_tests.cpp | 19 ++ 3 files changed, 324 insertions(+), 292 deletions(-) diff --git a/CMakePresets.json b/CMakePresets.json index 8d7c291c..cfb5d865 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -1,102 +1,125 @@ { - "version": 3, - "cmakeMinimumRequired": { - "major": 3, - "minor": 12, - "patch": 0 - }, - "configurePresets": [ - { - "name": "hyde-build-docs", - "description": "Build documentation", - "hidden": false, - "binaryDir": "${sourceDir}/../build/hyde", - "cacheVariables": { - "CMAKE_CXX_STANDARD": "20", - "BUILD_TESTING": "OFF", - "STLAB_MAIN_EXECUTOR": "none", - "STLAB_NO_STD_COROUTINES": "ON", - "STLAB_TASK_SYSTEM": "portable", - "STLAB_THREAD_SYSTEM": "pthread", - "stlab.coverage": "OFF" - } + "version": 3, + "cmakeMinimumRequired": { + "major": 3, + "minor": 12, + "patch": 0 }, - { - "name": "ninja-cpp20-debug-thread-undefined", - "description": "Ninja Debug Build", - "hidden": false, - "generator": "Ninja", - "binaryDir": "${sourceDir}/../build/ninja-cpp20-debug-thread-undefined", - "cacheVariables": { - "CMAKE_CXX_STANDARD": "20", - "CMAKE_BUILD_TYPE": "DEBUG", - "BUILD_TESTING": "ON", - "CMAKE_CXX_FLAGS": "-fsanitize=thread -fsanitize=undefined", - "CMAKE_LINKER_FLAGS": "-fsanitize=thread -fsanitize=undefined" - } - }, - { - "name": "ninja-cpp17-debug", - "description": "Ninja Debug Build", - "hidden": false, - "generator": "Ninja", - "binaryDir": "${sourceDir}/../build/ninja-cpp17-debug", - "cacheVariables": { - "CMAKE_CXX_STANDARD": "17", - "CMAKE_BUILD_TYPE": "DEBUG", - "BUILD_TESTING": "ON", - "CMAKE_VERBOSE_MAKEFILE": "ON" - } - }, - { - "name": "ninja-cpp20-debug-address", - "description": "Ninja Debug Build", - "hidden": false, - "generator": "Ninja", - "binaryDir": "${sourceDir}/../build/ninja-cpp20-debug-address", - "cacheVariables": { - "CMAKE_CXX_STANDARD": "20", - "CMAKE_BUILD_TYPE": "DEBUG", - "BUILD_TESTING": "ON", - "CMAKE_CXX_FLAGS": "-fsanitize=address", - "CMAKE_LINKER_FLAGS": "-fsanitize=address", - "CMAKE_VERBOSE_MAKEFILE": "ON" - } - }, - { - "name": "clang-tidy-fix", - "hidden": false, - "generator": "Ninja", - "binaryDir": "${sourceDir}/../build/clang-tidy-fix", - "cacheVariables": { - "CMAKE_CXX_STANDARD": "17", - "CMAKE_BUILD_TYPE": "DEBUG", - "BUILD_TESTING": "ON", - "CMAKE_CXX_CLANG_TIDY": "clang-tidy;--fix;-header-filter=stlab/.*" - } - }, - { - "name": "clang-tidy-nofix", - "hidden": false, - "generator": "Ninja", - "binaryDir": "${sourceDir}/../build/clang-tidy-nofix", - "cacheVariables": { - "CMAKE_CXX_STANDARD": "17", - "CMAKE_BUILD_TYPE": "DEBUG", - "BUILD_TESTING": "ON", - "CMAKE_CXX_CLANG_TIDY": "clang-tidy;-header-filter=stlab/.*" - } - } - ], - "buildPresets": [ - { - "name": "clang-tidy-fix", - "configurePreset": "clang-tidy-fix", - "jobs": 1 - }, - { - "name": "clang-tidy-nofix", - "configurePreset": "clang-tidy-nofix" - } - ] + "configurePresets": [ + { + "name": "hyde-build-docs", + "description": "Build documentation", + "hidden": false, + "binaryDir": "${sourceDir}/../build/hyde", + "cacheVariables": { + "CMAKE_CXX_STANDARD": "20", + "BUILD_TESTING": "OFF", + "STLAB_MAIN_EXECUTOR": "none", + "STLAB_NO_STD_COROUTINES": "ON", + "STLAB_TASK_SYSTEM": "portable", + "STLAB_THREAD_SYSTEM": "pthread", + "stlab.coverage": "OFF" + } + }, + { + "name": "ninja-cpp20-debug-thread-undefined", + "description": "Ninja Debug Build", + "hidden": false, + "generator": "Ninja", + "binaryDir": "${sourceDir}/../build/ninja-cpp20-debug-thread-undefined", + "cacheVariables": { + "CMAKE_CXX_STANDARD": "20", + "CMAKE_BUILD_TYPE": "DEBUG", + "BUILD_TESTING": "ON", + "CMAKE_CXX_FLAGS": "-fsanitize=thread -fsanitize=undefined", + "CMAKE_LINKER_FLAGS": "-fsanitize=thread -fsanitize=undefined" + } + }, + { + "name": "xcode-cpp20-debug", + "description": "", + "hidden": false, + "generator": "Xcode", + "binaryDir": "${sourceDir}/../build/xcode-cpp20-debug", + "cacheVariables": { + "CMAKE_CXX_STANDARD": "20", + "CMAKE_BUILD_TYPE": "DEBUG", + "BUILD_TESTING": "ON" + } + }, + { + "name": "ninja-cpp17-debug", + "description": "Ninja Debug Build", + "hidden": false, + "generator": "Ninja", + "binaryDir": "${sourceDir}/../build/ninja-cpp17-debug", + "cacheVariables": { + "CMAKE_CXX_STANDARD": "17", + "CMAKE_BUILD_TYPE": "DEBUG", + "BUILD_TESTING": "ON", + "CMAKE_VERBOSE_MAKEFILE": "ON" + } + }, + { + "name": "ninja-cpp20-debug-address", + "description": "Ninja Debug Build", + "hidden": false, + "generator": "Ninja", + "binaryDir": "${sourceDir}/../build/ninja-cpp20-debug-address", + "cacheVariables": { + "CMAKE_CXX_STANDARD": "20", + "CMAKE_BUILD_TYPE": "DEBUG", + "BUILD_TESTING": "ON", + "CMAKE_CXX_FLAGS": "-fsanitize=address", + "CMAKE_LINKER_FLAGS": "-fsanitize=address", + "CMAKE_VERBOSE_MAKEFILE": "ON" + } + }, + { + "name": "clang-tidy-fix", + "hidden": false, + "generator": "Ninja", + "binaryDir": "${sourceDir}/../build/clang-tidy-fix", + "cacheVariables": { + "CMAKE_CXX_STANDARD": "17", + "CMAKE_BUILD_TYPE": "DEBUG", + "BUILD_TESTING": "ON", + "CMAKE_CXX_CLANG_TIDY": "clang-tidy;--fix" + } + }, + { + "name": "clang-tidy-nofix", + "hidden": false, + "generator": "Ninja", + "binaryDir": "${sourceDir}/../build/clang-tidy-nofix", + "cacheVariables": { + "CMAKE_CXX_STANDARD": "17", + "CMAKE_BUILD_TYPE": "DEBUG", + "BUILD_TESTING": "ON", + "CMAKE_CXX_CLANG_TIDY": "clang-tidy" + } + } + ], + "buildPresets": [ + { + "name": "clang-tidy-fix", + "configurePreset": "clang-tidy-fix", + "jobs": 1 + }, + { + "name": "clang-tidy-nofix", + "configurePreset": "clang-tidy-nofix" + } + ], + "testPresets": [ + { + "name": "c++20-debug-tsan-ubsan-verbose", + "description": "", + "displayName": "", + "configurePreset": "ninja-cpp20-debug-thread-undefined", + "output":{ + "verbosity": "verbose" + } + } + ] } diff --git a/stlab/concurrency/future.hpp b/stlab/concurrency/future.hpp index d88bf24f..ab82aa52 100644 --- a/stlab/concurrency/future.hpp +++ b/stlab/concurrency/future.hpp @@ -180,44 +180,44 @@ namespace detail { /**************************************************************************************************/ -template +template struct result_of_; -template +template struct result_of_ { using type = R; }; -template +template using result_of_t_ = typename result_of_::type; -template +template struct result_of_when_all_t; -template +template struct result_of_when_all_t { using result_type = detail::result_t; }; -template +template struct result_of_when_all_t { using result_type = detail::result_t&>; }; -template +template struct result_of_when_any_t; -template +template struct result_of_when_any_t { using result_type = detail::result_t; }; -template +template struct result_of_when_any_t { using result_type = detail::result_t; }; -template +template auto unique_usage(const std::shared_ptr& p) -> bool { return p.use_count() == 1; } @@ -228,10 +228,10 @@ auto unique_usage(const std::shared_ptr& p) -> bool { /**************************************************************************************************/ -template +template class packaged_task; -template +template class future; /**************************************************************************************************/ @@ -240,15 +240,15 @@ namespace detail { /**************************************************************************************************/ -template +template struct packaged_task_from_signature; -template +template struct packaged_task_from_signature { using type = packaged_task; }; -template +template using packaged_task_from_signature_t = typename packaged_task_from_signature::type; /**************************************************************************************************/ @@ -277,22 +277,22 @@ inline constexpr bool is_future_v = false; template inline constexpr bool is_future_v> = true; -template +template using reduced_t = std::conditional_t, T, future>; -template +template using reduced_result_t = reduced_t>; /**************************************************************************************************/ -template +template struct value_; } // namespace detail /**************************************************************************************************/ -template +template auto package(E, F&&) -> std::pair, detail::reduced_result_t>; @@ -302,24 +302,24 @@ namespace detail { /**************************************************************************************************/ -template +template struct shared; template struct shared_base; /**************************************************************************************************/ -template +template struct shared_task { virtual ~shared_task() = default; - virtual void operator()(Args... args) = 0; - virtual void set_exception(const std::exception_ptr& error) = 0; + virtual void operator()(Args...) = 0; + virtual void set_exception(const std::exception_ptr&) noexcept = 0; }; /**************************************************************************************************/ -template +template struct shared_base>> : std::enable_shared_from_this> { using then_t = std::vector>>; @@ -335,12 +335,12 @@ struct shared_base>> explicit shared_base(executor_t s) : _executor(std::move(s)) {} - template + template auto recover(future&& p, F&& f) { return recover(std::move(p), _executor, std::forward(f)); } - template + template auto recover(future&& p, E executor, F&& f) { using result_type = detail::result_t>; @@ -450,7 +450,7 @@ struct shared_base>> /**************************************************************************************************/ -template +template struct shared_base>> : std::enable_shared_from_this> { using then_t = std::pair>; @@ -464,7 +464,7 @@ struct shared_base>> explicit shared_base(executor_t s) : _executor(std::move(s)) {} - template + template auto recover(future&& p, F&& f) { return recover(std::move(p), _executor, std::forward(f)); } @@ -474,7 +474,7 @@ struct shared_base>> cause _this_ to be deleted, and the executor passed in may be this->_executor */ - template + template auto recover(future&& p, E executor, F&& f) { using result_type = detail::result_t>; @@ -608,47 +608,44 @@ class promise { template promise(std::shared_ptr>) -> promise; -template -struct shared final : shared_base, shared_task { - using function_t = task&&, Args...) noexcept>; - - function_t _f; +template +struct shared final : shared_base, shared_task { + std::optional _f; - template - shared(executor_t s, F&& f) : shared_base(std::move(s)), _f(std::forward(f)) {} - - shared(executor_t s) : shared_base(std::move(s)) {} + shared(executor_t s, F&& f) : shared_base(std::move(s)), _f(std::move(f)) {} void operator()(Args... args) noexcept override { - if (!_f) return; - - _f(promise{this->shared_from_this()}, std::move(args)...); - - _f = function_t(); + std::move (*_f)(promise{this->shared_from_this()}, std::move(args)...); + // After invoking `_f`, it is not destructed because it could be satisfying the promise + // asynchronously. `_f` is responsible for any cleanup prior to the future being released + // and must be aware that it may be destructed at any time after this point. } - void set_exception(const std::exception_ptr& error) override { - if (!_f) return; - - this->_set_exception(error); - _f = function_t(); + void set_exception(const std::exception_ptr& error) noexcept override { + shared_base::_set_exception(error); + _f.reset(); // _f will not be invoked, release it and any resources it holds } }; +template +auto make_shared_state(executor_t s, F&& f) -> std::shared_ptr> { + return std::make_shared>(std::move(s), std::forward(f)); +} + /**************************************************************************************************/ } // namespace detail /**************************************************************************************************/ -template +template class packaged_task { using ptr_t = std::weak_ptr>; ptr_t _p; explicit packaged_task(ptr_t&& p) : _p(std::move(p)) {} - template + template friend auto package(E, F&&) -> std::pair, detail::reduced_result_t>; @@ -670,7 +667,7 @@ class packaged_task { packaged_task(packaged_task&&) noexcept = default; auto operator=(packaged_task&& x) noexcept -> packaged_task& = default; - template + template void operator()(A&&... args) noexcept { if (auto p = _p.lock()) { _p.reset(); @@ -690,7 +687,7 @@ class packaged_task { /**************************************************************************************************/ -template +template class STLAB_NODISCARD() future>> { using type = void_to_monostate_t; using ptr_t = std::shared_ptr>; @@ -698,7 +695,7 @@ class STLAB_NODISCARD() future>> { explicit future(ptr_t p) : _p(std::move(p)) {} - template + template friend auto package(E, F&&) -> std::pair, detail::reduced_result_t>; @@ -707,7 +704,7 @@ class STLAB_NODISCARD() future>> { friend struct detail::shared_base; - template + template friend struct detail::value_; public: @@ -723,7 +720,7 @@ class STLAB_NODISCARD() future>> { [[nodiscard]] auto valid() const -> bool { return static_cast(_p); } - template + template auto then(F&& f) const& { return recover([_f = std::forward(f)](future&& p) mutable { return invoke_remove_monostate_arguments( @@ -732,12 +729,12 @@ class STLAB_NODISCARD() future>> { }); } - template + template auto operator|(F&& f) const& { return then(std::forward(f)); } - template + template auto then(E&& executor, F&& f) const& { return recover( std::forward(executor), [_f = std::forward(f)](future&& p) mutable { @@ -747,12 +744,12 @@ class STLAB_NODISCARD() future>> { }); } - template + template auto operator|(executor_task_pair etp) const& { return then(std::move(etp)._executor, std::move(etp)._f); } - template + template auto then(F&& f) && { return std::move(*this).recover([_f = std::forward(f)](future&& p) mutable { return invoke_remove_monostate_arguments( @@ -761,12 +758,12 @@ class STLAB_NODISCARD() future>> { }); } - template + template auto operator|(F&& f) && { return std::move(*this).then(std::forward(f)); } - template + template auto then(E&& executor, F&& f) && { return std::move(*this).recover( std::forward(executor), [_f = std::forward(f)](future&& p) mutable { @@ -776,49 +773,49 @@ class STLAB_NODISCARD() future>> { }); } - template + template auto operator|(executor_task_pair etp) && { return std::move(*this).then(std::move(etp)._executor, std::move(etp)._f); } - template + template auto recover(F&& f) const& { return _p->recover(copy(*this), std::forward(f)); } - template + template auto operator^(F&& f) const& { return recover(std::forward(f)); } - template + template auto recover(E&& executor, F&& f) const& { return _p->recover(copy(*this), std::forward(executor), std::forward(f)); } - template + template auto operator^(executor_task_pair etp) const& { return recover(std::move(etp)._executor, std::move(etp)._f); } - template + template auto recover(F&& f) && { auto& self = *_p.get(); return self.recover(std::move(*this), std::forward(f)); } - template + template auto operator^(F&& f) && { return std::move(*this).recover(std::forward(f)); } - template + template auto recover(E&& executor, F&& f) && { auto& self = *_p.get(); return self.recover(std::move(*this), std::forward(executor), std::forward(f)); } - template + template auto operator^(executor_task_pair etp) && { return std::move(*this).recover(std::move(etp)._executor, std::move(etp)._f); } @@ -857,7 +854,7 @@ class STLAB_NODISCARD() future>> { /**************************************************************************************************/ -template +template class STLAB_NODISCARD() future>> { using ptr_t = std::shared_ptr>; ptr_t _p; @@ -865,7 +862,7 @@ class STLAB_NODISCARD() future> explicit future(ptr_t p) : _p(std::move(p)) {} future(const future&) = default; - template + template friend auto package(E, F&&) -> std::pair, detail::reduced_result_t>; @@ -874,7 +871,7 @@ class STLAB_NODISCARD() future> friend struct detail::shared_base; - template + template friend struct detail::value_; public: @@ -893,19 +890,19 @@ class STLAB_NODISCARD() future> [[nodiscard]] auto valid() const -> bool { return static_cast(_p); } - template + template auto then(F&& f) && { return std::move(*this).recover([_f = std::forward(f)](future&& p) mutable { return std::move(_f)(*std::move(p).get_try()); }); } - template + template auto operator|(F&& f) && { return std::move(*this).then(std::forward(f)); } - template + template auto then(E&& executor, F&& f) && { return std::move(*this).recover(std::forward(executor), [_f = std::forward(f)](future&& p) mutable { @@ -913,29 +910,29 @@ class STLAB_NODISCARD() future> }); } - template + template auto operator|(executor_task_pair etp) && { return std::move(*this).then(std::move(etp)._executor, std::move(etp)._f); } - template + template auto recover(F&& f) && { auto& self = *_p.get(); return self.recover(std::move(*this), std::forward(f)); } - template + template auto operator^(F&& f) && { return std::move(*this).recover(std::forward(f)); } - template + template auto recover(E&& executor, F&& f) && { auto& self = *_p.get(); return self.recover(std::move(*this), std::forward(executor), std::forward(f)); } - template + template auto operator^(executor_task_pair etp) && { return std::move(*this).recover(std::move(etp)._executor, std::move(etp)._f); } @@ -972,7 +969,7 @@ class STLAB_NODISCARD() future> } }; -template +template auto package(E executor, F&& f) -> std::pair, detail::reduced_result_t> { if constexpr (std::is_same_v) { @@ -982,55 +979,57 @@ auto package(E executor, F&& f) using result_t = detail::result_of_t_; if constexpr (detail::is_future_v) { - auto p = - std::make_shared>>(std::move(executor)); - - p->_f = [_f = std::forward(f)](auto&& promise, auto&&... args) mutable noexcept { - if (promise.canceled()) return; - - try { - auto r = std::move(_f)(std::forward(args)...); + auto p = detail::make_shared_state>( + std::move(executor), + [_f = std::make_optional(std::forward(f)), + _hold = future{}](auto&& promise, auto&&... args) mutable noexcept { + assert(_f && "packaged task invoked twice"); try { - std::move(r).detach([_p = std::move(promise)](auto&& f) mutable noexcept { - if (auto e = f.exception()) { - std::move(_p).set_exception(e); - } else { - std::move(_p).set_value(invoke_void_to_monostate_result( - [&] { return std::forward(f).get_ready(); })); - } - }); + auto r = std::move(*_f)(std::forward(args)...); + try { + _hold = std::move(r).recover( + immediate_executor, + [_p = std::move(promise)](auto&& f) mutable noexcept { + if (auto e = f.exception()) { + std::move(_p).set_exception(std::move(e)); + } else { + std::move(_p).set_value(invoke_void_to_monostate_result( + [&] { return std::forward(f).get_ready(); })); + } + }); + } catch (...) { + /* NOTE: an exception here is reported as a broken promise. Ideally recover + * would be passed the initial promise (it flows through the chain), but the + * API isn't there yet. */ + } } catch (...) { - /* NOTE: an exception here is reported as a broken promise. Ideally detach - * would be passed the initial promise (it flows through the chain), but the - * API isn't there yet. */ + std::move(promise).set_exception(std::current_exception()); } - } catch (...) { - std::move(promise).set_exception(std::current_exception()); - } - }; + _f.reset(); + }); return {detail::packaged_task_from_signature_t{p}, result_t{p}}; } else { - auto p = std::make_shared>(std::move(executor)); - - p->_f = [_f = std::forward(f)](auto&& promise, auto&&... args) mutable noexcept { - if (promise.canceled()) return; - - try { - auto tmp = invoke_void_to_monostate_result(std::move(_f), - std::forward(args)...); - std::move(promise).set_value(std::move(tmp)); // noexcept - } catch (...) { - std::move(promise).set_exception(std::current_exception()); - } - }; + auto p = detail::make_shared_state( + std::move(executor), [_f = std::make_optional(std::forward(f))]( + auto&& promise, auto&&... args) mutable noexcept { + assert(_f && "packaged task invoked twice"); + try { + auto tmp = invoke_void_to_monostate_result( + std::move(*_f), std::forward(args)...); + std::move(promise).set_value(std::move(tmp)); // noexcept + } catch (...) { + std::move(promise).set_exception(std::current_exception()); + } + _f.reset(); + }); return {detail::packaged_task_from_signature_t{p}, future{p}}; } } template auto future_with_broken_promise(E executor) -> detail::reduced_t { - auto p = - std::make_shared>>(std::move(executor)); + auto p = std::make_shared::result_type>>( + std::move(executor)); p->_exception = std::make_exception_ptr(future_error(future_error_codes::broken_promise)); p->_ready = true; @@ -1041,9 +1040,9 @@ auto future_with_broken_promise(E executor) -> detail::reduced_t { namespace detail { -template +template struct assign_ready_future { - template + template static void assign(T& x, F&& f) { x = std::move(*(std::move(f).get_try())); } @@ -1051,13 +1050,13 @@ struct assign_ready_future { template <> struct assign_ready_future> { - template + template static void assign(T& x, const future&) { x = std::move(typename T::value_type()); // to set the optional } }; -template +template struct when_all_shared { // decay Args _args; @@ -1068,7 +1067,7 @@ struct when_all_shared { packaged_task<> _f; // require f is sink. - template + template auto done(FF&& f) -> std::enable_if_t> { auto run{false}; { @@ -1096,7 +1095,7 @@ struct when_all_shared { } }; -template +template struct when_any_shared { using result_type = R; // decay @@ -1120,7 +1119,7 @@ struct when_any_shared { if (run) _f(); } - template + template void done(FF&& f) { auto run{false}; { @@ -1134,7 +1133,7 @@ struct when_any_shared { if (run) _f(); } - template + template auto apply(F& f) { return f(std::move(*_arg), _index); } @@ -1163,7 +1162,7 @@ struct when_any_shared { if (run) _f(); } - template + template void done(FF&&) { auto run{false}; { @@ -1176,7 +1175,7 @@ struct when_any_shared { if (run) _f(); } - template + template auto apply(F& f) { return f(_index); } @@ -1186,7 +1185,7 @@ inline void rethrow_if_false(bool x, const std::exception_ptr& p) { if (!x) std::rethrow_exception(p); } -template +template auto apply_when_all_args_(F& f, Args& args, P& p, std::index_sequence) { (void)std::initializer_list{ (rethrow_if_false(static_cast(std::get(args)), p->_exception), 0)...}; @@ -1195,13 +1194,13 @@ auto apply_when_all_args_(F& f, Args& args, P& p, std::index_sequence) { remove_placeholder::template function>>(f, args); } -template +template auto apply_when_all_args(F& f, P& p) { return apply_when_all_args_( f, p->_args, p, std::make_index_sequence_args)>::value>()); } -template +template auto apply_when_any_arg(F& f, P& p) { if (p->_exception) { std::rethrow_exception(p->_exception); @@ -1210,7 +1209,7 @@ auto apply_when_any_arg(F& f, P& p) { return p->apply(f); } -template +template void attach_when_arg_(E&& executor, std::shared_ptr

& shared, T a) { auto holds = std::move(a).recover(std::forward(executor), [_w = std::weak_ptr

(shared)](auto&& x) { @@ -1227,13 +1226,13 @@ void attach_when_arg_(E&& executor, std::shared_ptr

& shared, T a) { shared->_holds[i] = std::move(holds); } -template +template void attach_when_args_(std::index_sequence, E&& executor, std::shared_ptr

& p, Ts... a) { (void)std::initializer_list{ (attach_when_arg_(std::forward(executor), p, std::move(a)), 0)...}; } -template +template void attach_when_args(E&& executor, std::shared_ptr

& p, Ts... a) { attach_when_args_(std::make_index_sequence(), std::forward(executor), p, std::move(a)...); @@ -1243,7 +1242,7 @@ void attach_when_args(E&& executor, std::shared_ptr

& p, Ts... a) { /**************************************************************************************************/ -template +template auto when_all(const E& executor, F f, future... args) { using vt_t = voidless_tuple; using opt_t = optional_placeholder_tuple; @@ -1261,9 +1260,9 @@ auto when_all(const E& executor, F f, future... args) { /**************************************************************************************************/ -template +template struct make_when_any { - template + template static auto make(const E& executor, F f, future arg, future... args) { using result_t = detail::result_t; @@ -1283,7 +1282,7 @@ struct make_when_any { template <> struct make_when_any { - template + template static auto make(E&& executor, F&& f, future... args) { using result_t = detail::result_t; @@ -1301,7 +1300,7 @@ struct make_when_any { /**************************************************************************************************/ -template +template auto when_any(E&& executor, F&& f, future&& arg, future&&... args) { return make_when_any::make(std::forward(executor), std::forward(f), std::move(arg), std::move(args)...); @@ -1310,29 +1309,29 @@ auto when_any(E&& executor, F&& f, future&& arg, future&&... args) { /**************************************************************************************************/ namespace detail { -template +template struct value_storer { - template + template static void store(C& context, F&& f, std::size_t index) { context._results = std::move(*std::forward(f).get_try()); context._index = index; } }; -template +template struct value_storer> { - template + template static void store(C& context, F&& f, std::size_t index) { context._results[index] = std::move(*std::forward(f).get_try()); } }; -template +template struct result_creator; template <> struct result_creator { - template + template static auto go(C& context) { return context._f(context._index); } @@ -1340,29 +1339,29 @@ struct result_creator { template <> struct result_creator { - template + template static auto go(C& context) { return context._f(); } }; -template +template struct result_creator { - template + template static auto go(C& context) { return context._f(std::move(context._results), context._index); } }; -template +template struct result_creator { - template + template static auto go(C& context) { return context._f(std::move(context._results)); } }; -template +template struct context_result { using result_type = R; @@ -1373,15 +1372,15 @@ struct context_result { context_result(F f, std::size_t s) : _f(std::move(f)) { init(_results, s); } - template + template void init(std::vector& v, std::size_t s) { v.resize(s); } - template + template void init(T&, std::size_t) {} - template + template void apply(FF&& f, std::size_t index) { value_storer::store(*this, std::forward(f), index); } @@ -1391,7 +1390,7 @@ struct context_result { auto operator()() { return result_creator::go(*this); } }; -template +template struct context_result { std::exception_ptr _exception; std::size_t _index{0}; @@ -1399,7 +1398,7 @@ struct context_result { context_result(F f, std::size_t) : _f(std::move(f)) {} - template + template void apply(FF&&, std::size_t index) { _index = index; } @@ -1418,7 +1417,7 @@ struct context_result { * anymore and so we cancel the all the others. */ struct single_trigger { - template + template static auto go(C& context, F&& f, size_t index) -> bool { auto run{false}; { @@ -1443,7 +1442,7 @@ struct single_trigger { * were fulfilled, the continuation is started. */ struct all_trigger { - template + template static auto go(C& context, F&& f, size_t index) -> bool { auto run{false}; { @@ -1454,7 +1453,7 @@ struct all_trigger { return run; } - template + template static auto go(C& context, const std::exception_ptr& error, size_t index) -> bool { auto run{false}; { @@ -1468,7 +1467,7 @@ struct all_trigger { } }; -template +template struct common_context : CR { std::mutex _guard; std::size_t _remaining; @@ -1489,7 +1488,7 @@ struct common_context : CR { if (FailureCollector::go(*this, error, index)) _f(); } - template + template void done(FF&& f, size_t index) { if (ResultCollector::go(*this, std::forward(f), index)) _f(); } @@ -1497,7 +1496,7 @@ struct common_context : CR { /**************************************************************************************************/ -template +template void attach_tasks(size_t index, E&& executor, const std::shared_ptr& context, T&& a) { auto&& hold = std::forward(a).recover( std::forward(executor), [_context = make_weak_ptr(context), _i = index](const auto& x) { @@ -1514,12 +1513,12 @@ void attach_tasks(size_t index, E&& executor, const std::shared_ptr& context, context->_holds[index] = std::move(hold); } -template +template struct create_range_of_futures; -template +template struct create_range_of_futures> { - template + template static auto do_it(const E& executor, F&& f, I first, I last) { assert(first != last); @@ -1537,9 +1536,9 @@ struct create_range_of_futures> { } }; -template +template struct create_range_of_futures> { - template + template static auto do_it(const E& executor, F&& f, I first, I last) { assert(first != last); @@ -1563,10 +1562,10 @@ struct create_range_of_futures> { /**************************************************************************************************/ -template // models ForwardIterator that reference to a range of futures of the same - // type +template // models ForwardIterator that reference to a range of futures of the same + // type auto when_all(const E& executor, F f, std::pair range) { using param_t = typename std::iterator_traits::value_type::result_type; using result_t = typename detail::result_of_when_all_t::result_type; @@ -1588,10 +1587,10 @@ auto when_all(const E& executor, F f, std::pair range) { /**************************************************************************************************/ -template // models ForwardIterator that reference to a range of futures of the same - // type +template // models ForwardIterator that reference to a range of futures of the same + // type auto when_any(const E& executor, F&& f, std::pair range) { using param_t = typename std::iterator_traits::value_type::result_type; using result_t = typename detail::result_of_when_any_t::result_type; @@ -1609,16 +1608,7 @@ auto when_any(const E& executor, F&& f, std::pair range) { /**************************************************************************************************/ -#if 0 - std::bind( - [_f = std::forward(f)]( - unwrap_reference_t>&... brgs) mutable -> result_type { - return std::move(_f)(move_if>>(brgs)...); - }, - std::forward(args)...)); -#endif - -template +template auto async(const E& executor, F&& f, Args&&... args) -> detail::reduced_t, std::decay_t...>> { using result_type = detail::result_t, std::decay_t...>; @@ -1660,7 +1650,7 @@ struct value_>> { } }; -template +template struct value_>> { template static void proceed(C& sb) { @@ -1688,7 +1678,7 @@ void shared_base>>::set_value(A&& a value_::set(*this, std::forward(a)); } -template +template template void shared_base>>::set_value(A&& a) { value_::set(*this, std::forward(a)); @@ -1707,7 +1697,7 @@ void shared_base>>::set_value(A #ifndef STLAB_NO_STD_COROUTINES -template +template struct std::coroutine_traits, Args...> { struct promise_type { std::pair, stlab::future> _promise; @@ -1722,7 +1712,7 @@ struct std::coroutine_traits, Args...> { auto final_suspend() const noexcept { return std::suspend_never{}; } - template + template void return_value(U&& val) { _promise.first(std::forward(val)); } @@ -1731,7 +1721,7 @@ struct std::coroutine_traits, Args...> { }; }; -template +template struct std::coroutine_traits, Args...> { struct promise_type { std::pair, stlab::future> _promise; @@ -1754,7 +1744,7 @@ struct std::coroutine_traits, Args...> { }; }; -template +template auto operator co_await(stlab::future f) { struct Awaiter { stlab::future _input; diff --git a/test/future_tests.cpp b/test/future_tests.cpp index 89eeb8fd..5e433d2b 100644 --- a/test/future_tests.cpp +++ b/test/future_tests.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -661,6 +662,24 @@ BOOST_AUTO_TEST_CASE(future_move_only_detach_with_execution) { BOOST_REQUIRE_EQUAL(42, result); } +BOOST_AUTO_TEST_CASE(future_reduction_cancellation) { + BOOST_TEST_MESSAGE("future reduction cancellation"); + + optional> _hold; + + auto f = async(immediate_executor, [] { return 42; }) | [&](int x) { + auto [promise_, future_] = package(immediate_executor, [x] { return x + 1; }); + _hold = std::move(promise_); + return std::move(future_); + }; + + BOOST_REQUIRE(_hold && !_hold->canceled()); + + f.reset(); // cancel the future + + BOOST_REQUIRE(_hold && _hold->canceled()); +} + BOOST_AUTO_TEST_CASE(future_reduction_with_mutable_task) { BOOST_TEST_MESSAGE("future reduction with mutable task"); From 4795e7fe120c172535a1e29219fd5bf6e06fdd5d Mon Sep 17 00:00:00 2001 From: Sean Parent Date: Sat, 21 Dec 2024 21:04:09 -0800 Subject: [PATCH 03/14] Restructuring to simplify Windows build (and all builds) (#553) Use CPM to manage boost dependencies. Move include files into /include/ directory to match conventions and simplify builds. Some CMake preset cleanup. Stricter compiler settings under VC++. Cross-platform CMake support for ASan. Enabled VC++ \analyze and addressed issues. --- .clang-tidy | 3 +- .github/workflows/stlab.yml | 40 +- CMakeLists.txt | 158 +- CMakePresets.json | 49 +- README.md | 10 +- cmake/CPM.cmake | 1269 +++++++++++++++++ cmake/StlabUtil.cmake | 4 +- cmake/stlab/development.cmake | 21 +- cmake/stlab/development/AppleClang.cmake | 3 +- cmake/stlab/development/Clang.cmake | 17 +- cmake/stlab/development/GNU.cmake | 2 +- cmake/stlab/development/MSVC.cmake | 47 +- docs/CMakeLists.txt | 1 - {stlab => include/stlab}/CMakeLists.txt | 0 .../stlab}/algorithm/reverse.hpp | 0 .../stlab}/concurrency/await.hpp | 0 .../stlab}/concurrency/channel.hpp | 0 .../stlab}/concurrency/concurrency.hpp | 0 .../stlab}/concurrency/default_executor.hpp | 0 .../stlab}/concurrency/executor_base.hpp | 0 .../stlab}/concurrency/future.hpp | 0 .../stlab}/concurrency/immediate_executor.hpp | 0 .../stlab}/concurrency/main_executor.hpp | 0 .../stlab}/concurrency/progress.hpp | 0 .../stlab}/concurrency/ready_future.hpp | 0 .../stlab}/concurrency/serial_queue.hpp | 0 .../concurrency/set_current_thread_name.hpp | 0 .../stlab}/concurrency/system_timer.hpp | 3 + {stlab => include/stlab}/concurrency/task.hpp | 0 .../stlab}/concurrency/traits.hpp | 0 .../stlab}/concurrency/tuple_algorithm.hpp | 4 +- .../stlab}/concurrency/utility.hpp | 0 {stlab => include/stlab}/config.hpp.in | 0 {stlab => include/stlab}/copy_on_write.hpp | 0 {stlab => include/stlab}/enum_ops.hpp | 0 {stlab => include/stlab}/forest.hpp | 0 .../stlab}/forest_algorithms.hpp | 0 {stlab => include/stlab}/functional.hpp | 0 .../stlab}/iterator/concepts.hpp | 0 .../stlab}/iterator/set_next.hpp | 0 {stlab => include/stlab}/memory.hpp | 0 {stlab => include/stlab}/pre_exit.hpp | 0 {stlab => include/stlab}/scope.hpp | 0 {stlab => include/stlab}/test/model.hpp | 0 {stlab => include/stlab}/utility.hpp | 0 {stlab => include/stlab}/version.hpp | 0 test/CMakeLists.txt | 169 ++- test/channel_process_tests.cpp | 6 +- test/executor_test.cpp | 51 +- test/forest_test.cpp | 2 +- test/future_tests.cpp | 18 +- test/future_then_tests.cpp | 4 +- test/future_when_all_arguments_tests.cpp | 14 +- test/future_when_all_range_tests.cpp | 2 +- 54 files changed, 1589 insertions(+), 308 deletions(-) create mode 100644 cmake/CPM.cmake rename {stlab => include/stlab}/CMakeLists.txt (100%) rename {stlab => include/stlab}/algorithm/reverse.hpp (100%) rename {stlab => include/stlab}/concurrency/await.hpp (100%) rename {stlab => include/stlab}/concurrency/channel.hpp (100%) rename {stlab => include/stlab}/concurrency/concurrency.hpp (100%) rename {stlab => include/stlab}/concurrency/default_executor.hpp (100%) rename {stlab => include/stlab}/concurrency/executor_base.hpp (100%) rename {stlab => include/stlab}/concurrency/future.hpp (100%) rename {stlab => include/stlab}/concurrency/immediate_executor.hpp (100%) rename {stlab => include/stlab}/concurrency/main_executor.hpp (100%) rename {stlab => include/stlab}/concurrency/progress.hpp (100%) rename {stlab => include/stlab}/concurrency/ready_future.hpp (100%) rename {stlab => include/stlab}/concurrency/serial_queue.hpp (100%) rename {stlab => include/stlab}/concurrency/set_current_thread_name.hpp (100%) rename {stlab => include/stlab}/concurrency/system_timer.hpp (98%) mode change 100755 => 100644 rename {stlab => include/stlab}/concurrency/task.hpp (100%) rename {stlab => include/stlab}/concurrency/traits.hpp (100%) rename {stlab => include/stlab}/concurrency/tuple_algorithm.hpp (98%) rename {stlab => include/stlab}/concurrency/utility.hpp (100%) rename {stlab => include/stlab}/config.hpp.in (100%) rename {stlab => include/stlab}/copy_on_write.hpp (100%) rename {stlab => include/stlab}/enum_ops.hpp (100%) rename {stlab => include/stlab}/forest.hpp (100%) rename {stlab => include/stlab}/forest_algorithms.hpp (100%) rename {stlab => include/stlab}/functional.hpp (100%) rename {stlab => include/stlab}/iterator/concepts.hpp (100%) rename {stlab => include/stlab}/iterator/set_next.hpp (100%) rename {stlab => include/stlab}/memory.hpp (100%) rename {stlab => include/stlab}/pre_exit.hpp (100%) rename {stlab => include/stlab}/scope.hpp (100%) rename {stlab => include/stlab}/test/model.hpp (100%) rename {stlab => include/stlab}/utility.hpp (100%) rename {stlab => include/stlab}/version.hpp (100%) diff --git a/.clang-tidy b/.clang-tidy index 4c01d8f0..68da711f 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -13,7 +13,6 @@ CheckOptions: - key: misc-include-cleaner.IgnoreHeaders value: > boost/test/.*; - __chrono/.*; - boost/multiprecision/.* + __chrono/.* HeaderFilterRegex: "^.*\/stlab\/.*$" # WarningsAsErrors: "*" diff --git a/.github/workflows/stlab.yml b/.github/workflows/stlab.yml index b47b3456..5dfa1b1c 100644 --- a/.github/workflows/stlab.yml +++ b/.github/workflows/stlab.yml @@ -46,7 +46,6 @@ jobs: rm '/usr/local/bin/python3.12' rm '/usr/local/bin/python3-config' rm '/usr/local/bin/python3.12-config' - brew install boost brew install ninja shell: bash @@ -55,18 +54,17 @@ jobs: run: | sudo apt-get update sudo apt-get install -y ninja-build - sudo apt-get install -y libboost-all-dev shell: bash - - name: Install dependencies // Windows - if: ${{ startsWith(matrix.config.os, 'windows') }} - run: | - choco install --yes ninja - vcpkg install boost-test:x64-windows boost-multiprecision:x64-windows + # - name: Install dependencies // Windows + # if: ${{ startsWith(matrix.config.os, 'windows') }} + # run: | + # choco install --yes ninja + # vcpkg install boost-test:x64-windows boost-multiprecision:x64-windows # vcpkg install boost:x64-windows # dotnet add package boost --version 1.85.0 # choco install --yes boost-msvc-14.3 - shell: cmd + # shell: cmd - name: Install dependencies // Linux Emscripten if: ${{ startsWith(matrix.config.compiler, 'emscripten') }} @@ -74,7 +72,7 @@ jobs: run: | sudo apt-get update sudo apt-get install -y ninja-build - git clone --depth 1 --recurse-submodules --shallow-submodules --jobs=8 https://github.com/boostorg/boost.git $HOME/boost + # git clone --depth 1 --recurse-submodules --shallow-submodules --jobs=8 https://github.com/boostorg/boost.git $HOME/boost git clone --depth 1 https://github.com/emscripten-core/emsdk.git $HOME/emsdk pushd $HOME/emsdk @@ -102,18 +100,18 @@ jobs: echo "CC=clang-${{matrix.config.version}}" >> $GITHUB_ENV echo "CXX=clang++-${{matrix.config.version}}" >> $GITHUB_ENV - - name: Compile Boost // Emscripten - if: ${{ startsWith(matrix.config.compiler, 'emscripten') }} - shell: bash -l {0} - run: | - mkdir -p ../build-boost - cmake -S $HOME/boost -B ../build-boost -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=23 \ - -DCMAKE_CXX_FLAGS="-Wno-deprecated-builtins" \ - -DCMAKE_TOOLCHAIN_FILE=$GITHUB_WORKSPACE/cmake/Platform/Emscripten-STLab.cmake \ - -DBOOST_INCLUDE_LIBRARIES="multiprecision;test" + # - name: Compile Boost // Emscripten + # if: ${{ startsWith(matrix.config.compiler, 'emscripten') }} + # shell: bash -l {0} + # run: | + # mkdir -p ../build-boost + # cmake -S $HOME/boost -B ../build-boost -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=23 \ + # -DCMAKE_CXX_FLAGS="-Wno-deprecated-builtins" \ + # -DCMAKE_TOOLCHAIN_FILE=$GITHUB_WORKSPACE/cmake/Platform/Emscripten-STLab.cmake \ + # -DBOOST_INCLUDE_LIBRARIES="multiprecision;test" - cmake --build ../build-boost - cmake --install ../build-boost + # cmake --build ../build-boost + # cmake --install ../build-boost - name: Configure // Unix !Emscripten if: ${{ (startsWith(matrix.config.os, 'ubuntu') || startsWith(matrix.config.os, 'macos')) && !startsWith(matrix.config.compiler, 'emscripten') }} @@ -136,7 +134,7 @@ jobs: run: | call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64 mkdir ..\build - cmake -S. -B../build -GNinja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_STANDARD=20 -DBoost_USE_STATIC_LIBS=TRUE -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake + cmake -S. -B../build -GNinja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_STANDARD=20 - name: Build // Unix if: ${{ startsWith(matrix.config.os, 'ubuntu') || startsWith(matrix.config.os, 'macos') }} diff --git a/CMakeLists.txt b/CMakeLists.txt index 66242e95..23642e93 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,27 +1,36 @@ -cmake_minimum_required( VERSION 3.23 ) +cmake_minimum_required(VERSION 3.23) -project( stlab VERSION 1.7.1 LANGUAGES CXX ) +project(stlab VERSION 1.7.1 LANGUAGES CXX) -list( APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake" ) -include( CTest ) -include( CMakeDependentOption ) -include( StlabUtil ) +# Set the default C++ language version +set(CMAKE_CXX_STANDARD 20 CACHE STRING "The C++ standard to use") +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) -find_package( Boost 1.74.0 OPTIONAL_COMPONENTS unit_test_framework ) -find_package( libdispatch ) -find_package( Qt5 QUIET COMPONENTS Core ) -find_package( Qt6 QUIET COMPONENTS Core ) -find_package( Threads ) +# Set the default build type to Release +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build" FORCE) +endif() + +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") +include(CMakeDependentOption) +include(StlabUtil) +# CTest must be included at the top level for tests to be found. +include(CTest) +find_package(libdispatch) +find_package(Qt5 QUIET COMPONENTS Core) +find_package(Qt6 QUIET COMPONENTS Core) +find_package(Threads) -cmake_dependent_option( stlab.coverage +cmake_dependent_option(stlab.coverage "Enable binary instrumentation to collect test coverage information in the DEBUG configuration" - OFF PROJECT_IS_TOP_LEVEL OFF ) + OFF PROJECT_IS_TOP_LEVEL OFF) stlab_check_disfunctional_coroutines(STLAB_DEFAULT_NO_STD_COROUTINES) -option( STLAB_NO_STD_COROUTINES "Suppress usage of standard coroutines. Useful for non-conforming compilers." ${STLAB_DEFAULT_NO_STD_COROUTINES} ) +option(STLAB_NO_STD_COROUTINES "Suppress usage of standard coroutines. Useful for non-conforming compilers." ${STLAB_DEFAULT_NO_STD_COROUTINES}) stlab_detect_thread_system(STLAB_DEFAULT_THREAD_SYSTEM) -set( STLAB_THREAD_SYSTEM ${STLAB_DEFAULT_THREAD_SYSTEM} CACHE STRING "Thread system to use (win32|pthread|pthread-emscripten|pthread-apple|none)") +set(STLAB_THREAD_SYSTEM ${STLAB_DEFAULT_THREAD_SYSTEM} CACHE STRING "Thread system to use (win32|pthread|pthread-emscripten|pthread-apple|none)") stlab_detect_task_system(STLAB_DEFAULT_TASK_SYSTEM) set(STLAB_TASK_SYSTEM ${STLAB_DEFAULT_TASK_SYSTEM} CACHE STRING "Task system to use (portable|libdispatch|windows).") @@ -29,28 +38,24 @@ set(STLAB_TASK_SYSTEM ${STLAB_DEFAULT_TASK_SYSTEM} CACHE STRING "Task system to stlab_detect_main_executor(STLAB_DEFAULT_MAIN_EXECUTOR) set(STLAB_MAIN_EXECUTOR ${STLAB_DEFAULT_MAIN_EXECUTOR} CACHE STRING "Main executor to use (qt5|qt6|libdispatch|emscripten|none).") -if( BUILD_TESTING AND NOT Boost_unit_test_framework_FOUND ) - message( SEND_ERROR "BUILD_TESTING is enabled, but an installation of Boost.Test was not found." ) -endif() - -if( (NOT STLAB_THREAD_SYSTEM STREQUAL "none") AND NOT Threads_FOUND ) - message( SEND_ERROR "STLAB_THREAD_SYSTEM is not \"none\", but a thread system was not found." ) +if((NOT STLAB_THREAD_SYSTEM STREQUAL "none") AND NOT Threads_FOUND) + message(SEND_ERROR "STLAB_THREAD_SYSTEM is not \"none\", but a thread system was not found.") endif() -if( (STLAB_TASK_SYSTEM STREQUAL "libdispatch") AND NOT libdispatch_FOUND ) - message( SEND_ERROR "STLAB_TASK_SYSTEM is set to \"libdispatch\", but a libdispatch installation was not found." ) +if((STLAB_TASK_SYSTEM STREQUAL "libdispatch") AND NOT libdispatch_FOUND) + message(SEND_ERROR "STLAB_TASK_SYSTEM is set to \"libdispatch\", but a libdispatch installation was not found.") endif() -if( (STLAB_MAIN_EXECUTOR STREQUAL "libdispatch") AND NOT libdispatch_FOUND ) - message( SEND_ERROR "STLAB_MAIN_EXECUTOR is set to \"libdispatch\", but a libdispatch installation was not found." ) +if((STLAB_MAIN_EXECUTOR STREQUAL "libdispatch") AND NOT libdispatch_FOUND) + message(SEND_ERROR "STLAB_MAIN_EXECUTOR is set to \"libdispatch\", but a libdispatch installation was not found.") endif() -if( (STLAB_MAIN_EXECUTOR STREQUAL "qt5") AND NOT Qt5Core_FOUND ) - message( SEND_ERROR "STLAB_MAIN_EXECUTOR is set to \"qt5\", but a Qt5 installation was not found." ) +if((STLAB_MAIN_EXECUTOR STREQUAL "qt5") AND NOT Qt5Core_FOUND) + message(SEND_ERROR "STLAB_MAIN_EXECUTOR is set to \"qt5\", but a Qt5 installation was not found.") endif() -if( (STLAB_MAIN_EXECUTOR STREQUAL "qt6") AND NOT Qt6Core_FOUND ) - message( SEND_ERROR "STLAB_MAIN_EXECUTOR is set to \"qt6\", but a Qt6 installation was not found." ) +if((STLAB_MAIN_EXECUTOR STREQUAL "qt6") AND NOT Qt6Core_FOUND) + message(SEND_ERROR "STLAB_MAIN_EXECUTOR is set to \"qt6\", but a Qt6 installation was not found.") endif() # @@ -59,18 +64,18 @@ endif() # transitively to linking targets. In our case, this ammounts to an include # directory, compile flags, linking flags, and links to system libraries. # -add_library( stlab INTERFACE ) -add_library( stlab::stlab ALIAS stlab ) +add_library(stlab INTERFACE) +add_library(stlab::stlab ALIAS stlab) # # The include directory for stlab can be expected to vary between build # and installaion. Here we use a CMake generator expression to dispatch # on how the configuration under which this library is being consumed. # -target_include_directories( stlab INTERFACE - $ - $ - $ ) +target_include_directories(stlab INTERFACE + $/include + $/include + $) # # Several definitions are specified for the microsoft compiler. These have @@ -79,24 +84,24 @@ target_include_directories( stlab INTERFACE # + NOMINMAX # disable the `min` and `max` macros defined in the windows.h header # -target_compile_definitions( stlab INTERFACE $<$:NOMINMAX> ) +target_compile_definitions(stlab INTERFACE $<$:NOMINMAX>) -add_subdirectory( stlab ) +add_subdirectory(include/stlab) -if ( NOT STLAB_THREAD_SYSTEM STREQUAL "none" ) - target_link_libraries( stlab INTERFACE Threads::Threads ) +if(NOT STLAB_THREAD_SYSTEM STREQUAL "none") + target_link_libraries(stlab INTERFACE Threads::Threads) endif() -if (STLAB_TASK_SYSTEM STREQUAL "libdispatch") +if(STLAB_TASK_SYSTEM STREQUAL "libdispatch") target_link_libraries(stlab INTERFACE libdispatch::libdispatch) endif() -if (STLAB_MAIN_EXECUTOR STREQUAL "libdispatch") +if(STLAB_MAIN_EXECUTOR STREQUAL "libdispatch") target_link_libraries(stlab INTERFACE libdispatch::libdispatch) -elseif (STLAB_MAIN_EXECUTOR STREQUAL "qt5") - target_link_libraries( stlab INTERFACE Qt5::Core ) -elseif (STLAB_MAIN_EXECUTOR STREQUAL "qt6") - target_link_libraries( stlab INTERFACE Qt6::Core ) +elseif(STLAB_MAIN_EXECUTOR STREQUAL "qt5") + target_link_libraries(stlab INTERFACE Qt5::Core) +elseif(STLAB_MAIN_EXECUTOR STREQUAL "qt6") + target_link_libraries(stlab INTERFACE Qt6::Core) endif() message(STATUS "stlab: Disable Coroutines: ${STLAB_DEFAULT_NO_STD_COROUTINES}") @@ -104,50 +109,15 @@ message(STATUS "stlab: Thread System: ${STLAB_THREAD_SYSTEM}") message(STATUS "stlab: Task System: ${STLAB_TASK_SYSTEM}") message(STATUS "stlab: Main Executor: ${STLAB_MAIN_EXECUTOR}") -if ( BUILD_TESTING ) - include( stlab/development ) - - # - # Establish a convenience target to encapsulate the properties common to the - # stlab tests and establish an alias for uniformity. - # - add_library( testing INTERFACE ) - add_library( stlab::testing ALIAS testing ) - - # - # CMake targets linking to the stlab::testing target will (transitively) - # link to the Boost::unit_test_framework and to stlab::stlab target. - # - target_link_libraries( testing INTERFACE - Boost::unit_test_framework - stlab::development - stlab::stlab ) - - # - # Linking to the Boost unit test framework requires an additional - # preprocessor definition when the unit test compiled resources are - # provided by a shared library rather than a static library. - # - - if (NOT Boost_USE_STATIC_LIBS) - target_compile_definitions( testing INTERFACE BOOST_TEST_DYN_LINK=1) - endif() - - add_subdirectory( test ) +if(BUILD_TESTING) + add_subdirectory(test) endif() -include( CMakePackageConfigHelpers ) # provides `write_basic_package_version_file` - -# -# We generate a CMake version file for later installation to be consumed by -# CMake's `find_package` intrinsic. Here we specify a semantic version -# convention, i.e., backwards compatability can be assumed within a Major -# version. -# +include(CMakePackageConfigHelpers) # provides `write_basic_package_version_file` write_basic_package_version_file( "${stlab_BINARY_DIR}/stlabConfigVersion.cmake" VERSION ${stlab_VERSION} - COMPATIBILITY SameMajorVersion ) + COMPATIBILITY SameMajorVersion) # # As a header-only library, there are no target components to be installed @@ -170,10 +140,10 @@ install( # This file is included by (and installed with) the cmake/CMakeConfig.cmake file # under version control. # -install( EXPORT stlabTargets +install(EXPORT stlabTargets FILE stlabTargets.cmake NAMESPACE stlab:: - DESTINATION share/cmake/stlab ) + DESTINATION share/cmake/stlab) # # Install the CMake configuration files to the `share/cmake/stlab` subdirectory @@ -185,11 +155,11 @@ install( EXPORT stlabTargets configure_file( "${stlab_SOURCE_DIR}/cmake/stlabConfig.cmake.in" "${stlab_BINARY_DIR}/stlabConfig.cmake" - @ONLY ) -install( FILES + @ONLY) +install(FILES "${stlab_BINARY_DIR}/stlabConfig.cmake" "${stlab_BINARY_DIR}/stlabConfigVersion.cmake" - DESTINATION share/cmake/stlab ) + DESTINATION share/cmake/stlab) # # Rudimentary CPack support. @@ -216,8 +186,8 @@ install( FILES # # See `cpack --help` or the CPack documentation for more information. # -include( InstallRequiredSystemLibraries ) -set( CPACK_PACKAGE_VENDOR "Adobe Software Technology Lab" ) -set( CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE" ) -set( CMAKE_PROJECT_HOMEPAGE_URL "https://stlab.cc/libraries/" ) -include( CPack ) +include(InstallRequiredSystemLibraries) +set(CPACK_PACKAGE_VENDOR "Adobe Software Technology Lab") +set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE") +set(CMAKE_PROJECT_HOMEPAGE_URL "https://stlab.cc/libraries/") +include(CPack) diff --git a/CMakePresets.json b/CMakePresets.json index cfb5d865..3e525db1 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -1,8 +1,8 @@ { - "version": 3, + "version": 10, "cmakeMinimumRequired": { "major": 3, - "minor": 12, + "minor": 28, "patch": 0 }, "configurePresets": [ @@ -10,7 +10,7 @@ "name": "hyde-build-docs", "description": "Build documentation", "hidden": false, - "binaryDir": "${sourceDir}/../build/hyde", + "binaryDir": "${sourceDir}/build/hyde", "cacheVariables": { "CMAKE_CXX_STANDARD": "20", "BUILD_TESTING": "OFF", @@ -26,11 +26,10 @@ "description": "Ninja Debug Build", "hidden": false, "generator": "Ninja", - "binaryDir": "${sourceDir}/../build/ninja-cpp20-debug-thread-undefined", + "binaryDir": "${sourceDir}/build/ninja-cpp20-debug-thread-undefined", "cacheVariables": { "CMAKE_CXX_STANDARD": "20", "CMAKE_BUILD_TYPE": "DEBUG", - "BUILD_TESTING": "ON", "CMAKE_CXX_FLAGS": "-fsanitize=thread -fsanitize=undefined", "CMAKE_LINKER_FLAGS": "-fsanitize=thread -fsanitize=undefined" } @@ -40,11 +39,10 @@ "description": "", "hidden": false, "generator": "Xcode", - "binaryDir": "${sourceDir}/../build/xcode-cpp20-debug", + "binaryDir": "${sourceDir}/build/xcode-cpp20-debug", "cacheVariables": { "CMAKE_CXX_STANDARD": "20", - "CMAKE_BUILD_TYPE": "DEBUG", - "BUILD_TESTING": "ON" + "CMAKE_BUILD_TYPE": "DEBUG" } }, { @@ -52,38 +50,31 @@ "description": "Ninja Debug Build", "hidden": false, "generator": "Ninja", - "binaryDir": "${sourceDir}/../build/ninja-cpp17-debug", + "binaryDir": "${sourceDir}/build/ninja-cpp17-debug", "cacheVariables": { "CMAKE_CXX_STANDARD": "17", - "CMAKE_BUILD_TYPE": "DEBUG", - "BUILD_TESTING": "ON", - "CMAKE_VERBOSE_MAKEFILE": "ON" + "CMAKE_BUILD_TYPE": "DEBUG" } }, { - "name": "ninja-cpp20-debug-address", - "description": "Ninja Debug Build", + "name": "debug", + "description": "Debug build", "hidden": false, "generator": "Ninja", - "binaryDir": "${sourceDir}/../build/ninja-cpp20-debug-address", + "binaryDir": "${sourceDir}/build/debug", "cacheVariables": { - "CMAKE_CXX_STANDARD": "20", "CMAKE_BUILD_TYPE": "DEBUG", - "BUILD_TESTING": "ON", - "CMAKE_CXX_FLAGS": "-fsanitize=address", - "CMAKE_LINKER_FLAGS": "-fsanitize=address", - "CMAKE_VERBOSE_MAKEFILE": "ON" + "STLAB_SANITIZER": "address" } }, { "name": "clang-tidy-fix", "hidden": false, "generator": "Ninja", - "binaryDir": "${sourceDir}/../build/clang-tidy-fix", + "binaryDir": "${sourceDir}/build/clang-tidy-fix", "cacheVariables": { "CMAKE_CXX_STANDARD": "17", "CMAKE_BUILD_TYPE": "DEBUG", - "BUILD_TESTING": "ON", "CMAKE_CXX_CLANG_TIDY": "clang-tidy;--fix" } }, @@ -91,13 +82,23 @@ "name": "clang-tidy-nofix", "hidden": false, "generator": "Ninja", - "binaryDir": "${sourceDir}/../build/clang-tidy-nofix", + "binaryDir": "${sourceDir}/build/clang-tidy-nofix", "cacheVariables": { "CMAKE_CXX_STANDARD": "17", "CMAKE_BUILD_TYPE": "DEBUG", - "BUILD_TESTING": "ON", "CMAKE_CXX_CLANG_TIDY": "clang-tidy" } + }, + { + "name": "win-ninja-cpp20-debug-thread-undefined", + "description": "Ninja Debug Build", + "hidden": false, + "generator": "Ninja", + "binaryDir": "${sourceDir}/build/win-ninja-cpp20-debug-thread-undefined", + "cacheVariables": { + "CMAKE_CXX_STANDARD": "20", + "CMAKE_BUILD_TYPE": "DEBUG" + } } ], "buildPresets": [ diff --git a/README.md b/README.md index 572bb469..5240622c 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ for an introduction to this tool. ### Configure -Run CMake in the root directory of this project, setting `../BUILD` as your build directory. The +Run CMake in the root directory of this project, setting `./build` as your build directory. The basis of your command will be ``` @@ -58,10 +58,10 @@ cmake -S . -B ../BUILD -DCMAKE_BUILD_TYPE=# SEE BELOW but there are other options you may need to append in order to be successful. Among them: -- `-DCMAKE_BUILD_TYPE=`[`Release`|`Debug`] to build the given configuration (required unless you're using Visual Studio or another multi-config generator). -- `-DCMAKE_CXX_STANDARD=`[`17`|`20`|`23`] to build with compliance to the given C++ standard. -- `-DBUILD_TESTING=OFF` if you only intend to build, but not test, this library. -- `-DBoost_USE_STATIC_LIBS=TRUE` if you will be testing on Windows. +- `-DCMAKE_BUILD_TYPE=`[**`Release`**|`Debug`] to build the given configuration (required unless you're using Visual Studio or another multi-config generator). +- `-DCMAKE_CXX_STANDARD=`[`17`|**`20`**|`23`] to build with compliance to the given C++ standard. +- `-DBUILD_TESTING=`[`ON`, `OFF`] turn off if you intend to build, but not test, this library. +- `-DSTLAB_TASK_SYSTEM=`[`portable`, `libdispatch`, `emscripten`, `windows`] to select the task system to use. Default is platform dependent. We also suggest the installation of [Ninja](https://ninja-build.org/) and its use by adding `-GNinja` to your cmake command line… but ninja is not required. diff --git a/cmake/CPM.cmake b/cmake/CPM.cmake new file mode 100644 index 00000000..8269a8bf --- /dev/null +++ b/cmake/CPM.cmake @@ -0,0 +1,1269 @@ +# CPM.cmake - CMake's missing package manager +# =========================================== +# See https://github.com/cpm-cmake/CPM.cmake for usage and update instructions. +# +# MIT License +# ----------- +#[[ + Copyright (c) 2019-2023 Lars Melchior and contributors + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. +]] + +cmake_minimum_required(VERSION 3.14 FATAL_ERROR) + +# Initialize logging prefix +if(NOT CPM_INDENT) + set(CPM_INDENT + "CPM:" + CACHE INTERNAL "" + ) +endif() + +if(NOT COMMAND cpm_message) + function(cpm_message) + message(${ARGV}) + endfunction() +endif() + +set(CURRENT_CPM_VERSION 0.40.2) + +get_filename_component(CPM_CURRENT_DIRECTORY "${CMAKE_CURRENT_LIST_DIR}" REALPATH) +if(CPM_DIRECTORY) + if(NOT CPM_DIRECTORY STREQUAL CPM_CURRENT_DIRECTORY) + if(CPM_VERSION VERSION_LESS CURRENT_CPM_VERSION) + message( + AUTHOR_WARNING + "${CPM_INDENT} \ +A dependency is using a more recent CPM version (${CURRENT_CPM_VERSION}) than the current project (${CPM_VERSION}). \ +It is recommended to upgrade CPM to the most recent version. \ +See https://github.com/cpm-cmake/CPM.cmake for more information." + ) + endif() + if(${CMAKE_VERSION} VERSION_LESS "3.17.0") + include(FetchContent) + endif() + return() + endif() + + get_property( + CPM_INITIALIZED GLOBAL "" + PROPERTY CPM_INITIALIZED + SET + ) + if(CPM_INITIALIZED) + return() + endif() +endif() + +if(CURRENT_CPM_VERSION MATCHES "development-version") + message( + WARNING "${CPM_INDENT} Your project is using an unstable development version of CPM.cmake. \ +Please update to a recent release if possible. \ +See https://github.com/cpm-cmake/CPM.cmake for details." + ) +endif() + +set_property(GLOBAL PROPERTY CPM_INITIALIZED true) + +macro(cpm_set_policies) + # the policy allows us to change options without caching + cmake_policy(SET CMP0077 NEW) + set(CMAKE_POLICY_DEFAULT_CMP0077 NEW) + + # the policy allows us to change set(CACHE) without caching + if(POLICY CMP0126) + cmake_policy(SET CMP0126 NEW) + set(CMAKE_POLICY_DEFAULT_CMP0126 NEW) + endif() + + # The policy uses the download time for timestamp, instead of the timestamp in the archive. This + # allows for proper rebuilds when a projects url changes + if(POLICY CMP0135) + cmake_policy(SET CMP0135 NEW) + set(CMAKE_POLICY_DEFAULT_CMP0135 NEW) + endif() + + # treat relative git repository paths as being relative to the parent project's remote + if(POLICY CMP0150) + cmake_policy(SET CMP0150 NEW) + set(CMAKE_POLICY_DEFAULT_CMP0150 NEW) + endif() +endmacro() +cpm_set_policies() + +option(CPM_USE_LOCAL_PACKAGES "Always try to use `find_package` to get dependencies" + $ENV{CPM_USE_LOCAL_PACKAGES} +) +option(CPM_LOCAL_PACKAGES_ONLY "Only use `find_package` to get dependencies" + $ENV{CPM_LOCAL_PACKAGES_ONLY} +) +option(CPM_DOWNLOAD_ALL "Always download dependencies from source" $ENV{CPM_DOWNLOAD_ALL}) +option(CPM_DONT_UPDATE_MODULE_PATH "Don't update the module path to allow using find_package" + $ENV{CPM_DONT_UPDATE_MODULE_PATH} +) +option(CPM_DONT_CREATE_PACKAGE_LOCK "Don't create a package lock file in the binary path" + $ENV{CPM_DONT_CREATE_PACKAGE_LOCK} +) +option(CPM_INCLUDE_ALL_IN_PACKAGE_LOCK + "Add all packages added through CPM.cmake to the package lock" + $ENV{CPM_INCLUDE_ALL_IN_PACKAGE_LOCK} +) +option(CPM_USE_NAMED_CACHE_DIRECTORIES + "Use additional directory of package name in cache on the most nested level." + $ENV{CPM_USE_NAMED_CACHE_DIRECTORIES} +) + +set(CPM_VERSION + ${CURRENT_CPM_VERSION} + CACHE INTERNAL "" +) +set(CPM_DIRECTORY + ${CPM_CURRENT_DIRECTORY} + CACHE INTERNAL "" +) +set(CPM_FILE + ${CMAKE_CURRENT_LIST_FILE} + CACHE INTERNAL "" +) +set(CPM_PACKAGES + "" + CACHE INTERNAL "" +) +set(CPM_DRY_RUN + OFF + CACHE INTERNAL "Don't download or configure dependencies (for testing)" +) + +if(DEFINED ENV{CPM_SOURCE_CACHE}) + set(CPM_SOURCE_CACHE_DEFAULT $ENV{CPM_SOURCE_CACHE}) +else() + set(CPM_SOURCE_CACHE_DEFAULT OFF) +endif() + +set(CPM_SOURCE_CACHE + ${CPM_SOURCE_CACHE_DEFAULT} + CACHE PATH "Directory to download CPM dependencies" +) + +if(NOT CPM_DONT_UPDATE_MODULE_PATH) + set(CPM_MODULE_PATH + "${CMAKE_BINARY_DIR}/CPM_modules" + CACHE INTERNAL "" + ) + # remove old modules + file(REMOVE_RECURSE ${CPM_MODULE_PATH}) + file(MAKE_DIRECTORY ${CPM_MODULE_PATH}) + # locally added CPM modules should override global packages + set(CMAKE_MODULE_PATH "${CPM_MODULE_PATH};${CMAKE_MODULE_PATH}") +endif() + +if(NOT CPM_DONT_CREATE_PACKAGE_LOCK) + set(CPM_PACKAGE_LOCK_FILE + "${CMAKE_BINARY_DIR}/cpm-package-lock.cmake" + CACHE INTERNAL "" + ) + file(WRITE ${CPM_PACKAGE_LOCK_FILE} + "# CPM Package Lock\n# This file should be committed to version control\n\n" + ) +endif() + +include(FetchContent) + +# Try to infer package name from git repository uri (path or url) +function(cpm_package_name_from_git_uri URI RESULT) + if("${URI}" MATCHES "([^/:]+)/?.git/?$") + set(${RESULT} + ${CMAKE_MATCH_1} + PARENT_SCOPE + ) + else() + unset(${RESULT} PARENT_SCOPE) + endif() +endfunction() + +# Try to infer package name and version from a url +function(cpm_package_name_and_ver_from_url url outName outVer) + if(url MATCHES "[/\\?]([a-zA-Z0-9_\\.-]+)\\.(tar|tar\\.gz|tar\\.bz2|zip|ZIP)(\\?|/|$)") + # We matched an archive + set(filename "${CMAKE_MATCH_1}") + + if(filename MATCHES "([a-zA-Z0-9_\\.-]+)[_-]v?(([0-9]+\\.)*[0-9]+[a-zA-Z0-9]*)") + # We matched - (ie foo-1.2.3) + set(${outName} + "${CMAKE_MATCH_1}" + PARENT_SCOPE + ) + set(${outVer} + "${CMAKE_MATCH_2}" + PARENT_SCOPE + ) + elseif(filename MATCHES "(([0-9]+\\.)+[0-9]+[a-zA-Z0-9]*)") + # We couldn't find a name, but we found a version + # + # In many cases (which we don't handle here) the url would look something like + # `irrelevant/ACTUAL_PACKAGE_NAME/irrelevant/1.2.3.zip`. In such a case we can't possibly + # distinguish the package name from the irrelevant bits. Moreover if we try to match the + # package name from the filename, we'd get bogus at best. + unset(${outName} PARENT_SCOPE) + set(${outVer} + "${CMAKE_MATCH_1}" + PARENT_SCOPE + ) + else() + # Boldly assume that the file name is the package name. + # + # Yes, something like `irrelevant/ACTUAL_NAME/irrelevant/download.zip` will ruin our day, but + # such cases should be quite rare. No popular service does this... we think. + set(${outName} + "${filename}" + PARENT_SCOPE + ) + unset(${outVer} PARENT_SCOPE) + endif() + else() + # No ideas yet what to do with non-archives + unset(${outName} PARENT_SCOPE) + unset(${outVer} PARENT_SCOPE) + endif() +endfunction() + +function(cpm_find_package NAME VERSION) + string(REPLACE " " ";" EXTRA_ARGS "${ARGN}") + find_package(${NAME} ${VERSION} ${EXTRA_ARGS} QUIET) + if(${CPM_ARGS_NAME}_FOUND) + if(DEFINED ${CPM_ARGS_NAME}_VERSION) + set(VERSION ${${CPM_ARGS_NAME}_VERSION}) + endif() + cpm_message(STATUS "${CPM_INDENT} Using local package ${CPM_ARGS_NAME}@${VERSION}") + CPMRegisterPackage(${CPM_ARGS_NAME} "${VERSION}") + set(CPM_PACKAGE_FOUND + YES + PARENT_SCOPE + ) + else() + set(CPM_PACKAGE_FOUND + NO + PARENT_SCOPE + ) + endif() +endfunction() + +# Create a custom FindXXX.cmake module for a CPM package This prevents `find_package(NAME)` from +# finding the system library +function(cpm_create_module_file Name) + if(NOT CPM_DONT_UPDATE_MODULE_PATH) + # erase any previous modules + file(WRITE ${CPM_MODULE_PATH}/Find${Name}.cmake + "include(\"${CPM_FILE}\")\n${ARGN}\nset(${Name}_FOUND TRUE)" + ) + endif() +endfunction() + +# Find a package locally or fallback to CPMAddPackage +function(CPMFindPackage) + set(oneValueArgs NAME VERSION GIT_TAG FIND_PACKAGE_ARGUMENTS) + + cmake_parse_arguments(CPM_ARGS "" "${oneValueArgs}" "" ${ARGN}) + + if(NOT DEFINED CPM_ARGS_VERSION) + if(DEFINED CPM_ARGS_GIT_TAG) + cpm_get_version_from_git_tag("${CPM_ARGS_GIT_TAG}" CPM_ARGS_VERSION) + endif() + endif() + + set(downloadPackage ${CPM_DOWNLOAD_ALL}) + if(DEFINED CPM_DOWNLOAD_${CPM_ARGS_NAME}) + set(downloadPackage ${CPM_DOWNLOAD_${CPM_ARGS_NAME}}) + elseif(DEFINED ENV{CPM_DOWNLOAD_${CPM_ARGS_NAME}}) + set(downloadPackage $ENV{CPM_DOWNLOAD_${CPM_ARGS_NAME}}) + endif() + if(downloadPackage) + CPMAddPackage(${ARGN}) + cpm_export_variables(${CPM_ARGS_NAME}) + return() + endif() + + cpm_find_package(${CPM_ARGS_NAME} "${CPM_ARGS_VERSION}" ${CPM_ARGS_FIND_PACKAGE_ARGUMENTS}) + + if(NOT CPM_PACKAGE_FOUND) + CPMAddPackage(${ARGN}) + cpm_export_variables(${CPM_ARGS_NAME}) + endif() + +endfunction() + +# checks if a package has been added before +function(cpm_check_if_package_already_added CPM_ARGS_NAME CPM_ARGS_VERSION) + if("${CPM_ARGS_NAME}" IN_LIST CPM_PACKAGES) + CPMGetPackageVersion(${CPM_ARGS_NAME} CPM_PACKAGE_VERSION) + if("${CPM_PACKAGE_VERSION}" VERSION_LESS "${CPM_ARGS_VERSION}") + message( + WARNING + "${CPM_INDENT} Requires a newer version of ${CPM_ARGS_NAME} (${CPM_ARGS_VERSION}) than currently included (${CPM_PACKAGE_VERSION})." + ) + endif() + cpm_get_fetch_properties(${CPM_ARGS_NAME}) + set(${CPM_ARGS_NAME}_ADDED NO) + set(CPM_PACKAGE_ALREADY_ADDED + YES + PARENT_SCOPE + ) + cpm_export_variables(${CPM_ARGS_NAME}) + else() + set(CPM_PACKAGE_ALREADY_ADDED + NO + PARENT_SCOPE + ) + endif() +endfunction() + +# Parse the argument of CPMAddPackage in case a single one was provided and convert it to a list of +# arguments which can then be parsed idiomatically. For example gh:foo/bar@1.2.3 will be converted +# to: GITHUB_REPOSITORY;foo/bar;VERSION;1.2.3 +function(cpm_parse_add_package_single_arg arg outArgs) + # Look for a scheme + if("${arg}" MATCHES "^([a-zA-Z]+):(.+)$") + string(TOLOWER "${CMAKE_MATCH_1}" scheme) + set(uri "${CMAKE_MATCH_2}") + + # Check for CPM-specific schemes + if(scheme STREQUAL "gh") + set(out "GITHUB_REPOSITORY;${uri}") + set(packageType "git") + elseif(scheme STREQUAL "gl") + set(out "GITLAB_REPOSITORY;${uri}") + set(packageType "git") + elseif(scheme STREQUAL "bb") + set(out "BITBUCKET_REPOSITORY;${uri}") + set(packageType "git") + # A CPM-specific scheme was not found. Looks like this is a generic URL so try to determine + # type + elseif(arg MATCHES ".git/?(@|#|$)") + set(out "GIT_REPOSITORY;${arg}") + set(packageType "git") + else() + # Fall back to a URL + set(out "URL;${arg}") + set(packageType "archive") + + # We could also check for SVN since FetchContent supports it, but SVN is so rare these days. + # We just won't bother with the additional complexity it will induce in this function. SVN is + # done by multi-arg + endif() + else() + if(arg MATCHES ".git/?(@|#|$)") + set(out "GIT_REPOSITORY;${arg}") + set(packageType "git") + else() + # Give up + message(FATAL_ERROR "${CPM_INDENT} Can't determine package type of '${arg}'") + endif() + endif() + + # For all packages we interpret @... as version. Only replace the last occurrence. Thus URIs + # containing '@' can be used + string(REGEX REPLACE "@([^@]+)$" ";VERSION;\\1" out "${out}") + + # Parse the rest according to package type + if(packageType STREQUAL "git") + # For git repos we interpret #... as a tag or branch or commit hash + string(REGEX REPLACE "#([^#]+)$" ";GIT_TAG;\\1" out "${out}") + elseif(packageType STREQUAL "archive") + # For archives we interpret #... as a URL hash. + string(REGEX REPLACE "#([^#]+)$" ";URL_HASH;\\1" out "${out}") + # We don't try to parse the version if it's not provided explicitly. cpm_get_version_from_url + # should do this at a later point + else() + # We should never get here. This is an assertion and hitting it means there's a problem with the + # code above. A packageType was set, but not handled by this if-else. + message(FATAL_ERROR "${CPM_INDENT} Unsupported package type '${packageType}' of '${arg}'") + endif() + + set(${outArgs} + ${out} + PARENT_SCOPE + ) +endfunction() + +# Check that the working directory for a git repo is clean +function(cpm_check_git_working_dir_is_clean repoPath gitTag isClean) + + find_package(Git REQUIRED) + + if(NOT GIT_EXECUTABLE) + # No git executable, assume directory is clean + set(${isClean} + TRUE + PARENT_SCOPE + ) + return() + endif() + + # check for uncommitted changes + execute_process( + COMMAND ${GIT_EXECUTABLE} status --porcelain + RESULT_VARIABLE resultGitStatus + OUTPUT_VARIABLE repoStatus + OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET + WORKING_DIRECTORY ${repoPath} + ) + if(resultGitStatus) + # not supposed to happen, assume clean anyway + message(WARNING "${CPM_INDENT} Calling git status on folder ${repoPath} failed") + set(${isClean} + TRUE + PARENT_SCOPE + ) + return() + endif() + + if(NOT "${repoStatus}" STREQUAL "") + set(${isClean} + FALSE + PARENT_SCOPE + ) + return() + endif() + + # check for committed changes + execute_process( + COMMAND ${GIT_EXECUTABLE} diff -s --exit-code ${gitTag} + RESULT_VARIABLE resultGitDiff + OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_QUIET + WORKING_DIRECTORY ${repoPath} + ) + + if(${resultGitDiff} EQUAL 0) + set(${isClean} + TRUE + PARENT_SCOPE + ) + else() + set(${isClean} + FALSE + PARENT_SCOPE + ) + endif() + +endfunction() + +# Add PATCH_COMMAND to CPM_ARGS_UNPARSED_ARGUMENTS. This method consumes a list of files in ARGN +# then generates a `PATCH_COMMAND` appropriate for `ExternalProject_Add()`. This command is appended +# to the parent scope's `CPM_ARGS_UNPARSED_ARGUMENTS`. +function(cpm_add_patches) + # Return if no patch files are supplied. + if(NOT ARGN) + return() + endif() + + # Find the patch program. + find_program(PATCH_EXECUTABLE patch) + if(WIN32 AND NOT PATCH_EXECUTABLE) + # The Windows git executable is distributed with patch.exe. Find the path to the executable, if + # it exists, then search `../usr/bin` and `../../usr/bin` for patch.exe. + find_package(Git QUIET) + if(GIT_EXECUTABLE) + get_filename_component(extra_search_path ${GIT_EXECUTABLE} DIRECTORY) + get_filename_component(extra_search_path_1up ${extra_search_path} DIRECTORY) + get_filename_component(extra_search_path_2up ${extra_search_path_1up} DIRECTORY) + find_program( + PATCH_EXECUTABLE patch HINTS "${extra_search_path_1up}/usr/bin" + "${extra_search_path_2up}/usr/bin" + ) + endif() + endif() + if(NOT PATCH_EXECUTABLE) + message(FATAL_ERROR "Couldn't find `patch` executable to use with PATCHES keyword.") + endif() + + # Create a temporary + set(temp_list ${CPM_ARGS_UNPARSED_ARGUMENTS}) + + # Ensure each file exists (or error out) and add it to the list. + set(first_item True) + foreach(PATCH_FILE ${ARGN}) + # Make sure the patch file exists, if we can't find it, try again in the current directory. + if(NOT EXISTS "${PATCH_FILE}") + if(NOT EXISTS "${CMAKE_CURRENT_LIST_DIR}/${PATCH_FILE}") + message(FATAL_ERROR "Couldn't find patch file: '${PATCH_FILE}'") + endif() + set(PATCH_FILE "${CMAKE_CURRENT_LIST_DIR}/${PATCH_FILE}") + endif() + + # Convert to absolute path for use with patch file command. + get_filename_component(PATCH_FILE "${PATCH_FILE}" ABSOLUTE) + + # The first patch entry must be preceded by "PATCH_COMMAND" while the following items are + # preceded by "&&". + if(first_item) + set(first_item False) + list(APPEND temp_list "PATCH_COMMAND") + else() + list(APPEND temp_list "&&") + endif() + # Add the patch command to the list + list(APPEND temp_list "${PATCH_EXECUTABLE}" "-p1" "<" "${PATCH_FILE}") + endforeach() + + # Move temp out into parent scope. + set(CPM_ARGS_UNPARSED_ARGUMENTS + ${temp_list} + PARENT_SCOPE + ) + +endfunction() + +# method to overwrite internal FetchContent properties, to allow using CPM.cmake to overload +# FetchContent calls. As these are internal cmake properties, this method should be used carefully +# and may need modification in future CMake versions. Source: +# https://github.com/Kitware/CMake/blob/dc3d0b5a0a7d26d43d6cfeb511e224533b5d188f/Modules/FetchContent.cmake#L1152 +function(cpm_override_fetchcontent contentName) + cmake_parse_arguments(PARSE_ARGV 1 arg "" "SOURCE_DIR;BINARY_DIR" "") + if(NOT "${arg_UNPARSED_ARGUMENTS}" STREQUAL "") + message(FATAL_ERROR "${CPM_INDENT} Unsupported arguments: ${arg_UNPARSED_ARGUMENTS}") + endif() + + string(TOLOWER ${contentName} contentNameLower) + set(prefix "_FetchContent_${contentNameLower}") + + set(propertyName "${prefix}_sourceDir") + define_property( + GLOBAL + PROPERTY ${propertyName} + BRIEF_DOCS "Internal implementation detail of FetchContent_Populate()" + FULL_DOCS "Details used by FetchContent_Populate() for ${contentName}" + ) + set_property(GLOBAL PROPERTY ${propertyName} "${arg_SOURCE_DIR}") + + set(propertyName "${prefix}_binaryDir") + define_property( + GLOBAL + PROPERTY ${propertyName} + BRIEF_DOCS "Internal implementation detail of FetchContent_Populate()" + FULL_DOCS "Details used by FetchContent_Populate() for ${contentName}" + ) + set_property(GLOBAL PROPERTY ${propertyName} "${arg_BINARY_DIR}") + + set(propertyName "${prefix}_populated") + define_property( + GLOBAL + PROPERTY ${propertyName} + BRIEF_DOCS "Internal implementation detail of FetchContent_Populate()" + FULL_DOCS "Details used by FetchContent_Populate() for ${contentName}" + ) + set_property(GLOBAL PROPERTY ${propertyName} TRUE) +endfunction() + +# Download and add a package from source +function(CPMAddPackage) + cpm_set_policies() + + list(LENGTH ARGN argnLength) + if(argnLength EQUAL 1) + cpm_parse_add_package_single_arg("${ARGN}" ARGN) + + # The shorthand syntax implies EXCLUDE_FROM_ALL and SYSTEM + set(ARGN "${ARGN};EXCLUDE_FROM_ALL;YES;SYSTEM;YES;") + endif() + + set(oneValueArgs + NAME + FORCE + VERSION + GIT_TAG + DOWNLOAD_ONLY + GITHUB_REPOSITORY + GITLAB_REPOSITORY + BITBUCKET_REPOSITORY + GIT_REPOSITORY + SOURCE_DIR + FIND_PACKAGE_ARGUMENTS + NO_CACHE + SYSTEM + GIT_SHALLOW + EXCLUDE_FROM_ALL + SOURCE_SUBDIR + CUSTOM_CACHE_KEY + ) + + set(multiValueArgs URL OPTIONS DOWNLOAD_COMMAND PATCHES) + + cmake_parse_arguments(CPM_ARGS "" "${oneValueArgs}" "${multiValueArgs}" "${ARGN}") + + # Set default values for arguments + + if(NOT DEFINED CPM_ARGS_VERSION) + if(DEFINED CPM_ARGS_GIT_TAG) + cpm_get_version_from_git_tag("${CPM_ARGS_GIT_TAG}" CPM_ARGS_VERSION) + endif() + endif() + + if(CPM_ARGS_DOWNLOAD_ONLY) + set(DOWNLOAD_ONLY ${CPM_ARGS_DOWNLOAD_ONLY}) + else() + set(DOWNLOAD_ONLY NO) + endif() + + if(DEFINED CPM_ARGS_GITHUB_REPOSITORY) + set(CPM_ARGS_GIT_REPOSITORY "https://github.com/${CPM_ARGS_GITHUB_REPOSITORY}.git") + elseif(DEFINED CPM_ARGS_GITLAB_REPOSITORY) + set(CPM_ARGS_GIT_REPOSITORY "https://gitlab.com/${CPM_ARGS_GITLAB_REPOSITORY}.git") + elseif(DEFINED CPM_ARGS_BITBUCKET_REPOSITORY) + set(CPM_ARGS_GIT_REPOSITORY "https://bitbucket.org/${CPM_ARGS_BITBUCKET_REPOSITORY}.git") + endif() + + if(DEFINED CPM_ARGS_GIT_REPOSITORY) + list(APPEND CPM_ARGS_UNPARSED_ARGUMENTS GIT_REPOSITORY ${CPM_ARGS_GIT_REPOSITORY}) + if(NOT DEFINED CPM_ARGS_GIT_TAG) + set(CPM_ARGS_GIT_TAG v${CPM_ARGS_VERSION}) + endif() + + # If a name wasn't provided, try to infer it from the git repo + if(NOT DEFINED CPM_ARGS_NAME) + cpm_package_name_from_git_uri(${CPM_ARGS_GIT_REPOSITORY} CPM_ARGS_NAME) + endif() + endif() + + set(CPM_SKIP_FETCH FALSE) + + if(DEFINED CPM_ARGS_GIT_TAG) + list(APPEND CPM_ARGS_UNPARSED_ARGUMENTS GIT_TAG ${CPM_ARGS_GIT_TAG}) + # If GIT_SHALLOW is explicitly specified, honor the value. + if(DEFINED CPM_ARGS_GIT_SHALLOW) + list(APPEND CPM_ARGS_UNPARSED_ARGUMENTS GIT_SHALLOW ${CPM_ARGS_GIT_SHALLOW}) + endif() + endif() + + if(DEFINED CPM_ARGS_URL) + # If a name or version aren't provided, try to infer them from the URL + list(GET CPM_ARGS_URL 0 firstUrl) + cpm_package_name_and_ver_from_url(${firstUrl} nameFromUrl verFromUrl) + # If we fail to obtain name and version from the first URL, we could try other URLs if any. + # However multiple URLs are expected to be quite rare, so for now we won't bother. + + # If the caller provided their own name and version, they trump the inferred ones. + if(NOT DEFINED CPM_ARGS_NAME) + set(CPM_ARGS_NAME ${nameFromUrl}) + endif() + if(NOT DEFINED CPM_ARGS_VERSION) + set(CPM_ARGS_VERSION ${verFromUrl}) + endif() + + list(APPEND CPM_ARGS_UNPARSED_ARGUMENTS URL "${CPM_ARGS_URL}") + endif() + + # Check for required arguments + + if(NOT DEFINED CPM_ARGS_NAME) + message( + FATAL_ERROR + "${CPM_INDENT} 'NAME' was not provided and couldn't be automatically inferred for package added with arguments: '${ARGN}'" + ) + endif() + + # Check if package has been added before + cpm_check_if_package_already_added(${CPM_ARGS_NAME} "${CPM_ARGS_VERSION}") + if(CPM_PACKAGE_ALREADY_ADDED) + cpm_export_variables(${CPM_ARGS_NAME}) + return() + endif() + + # Check for manual overrides + if(NOT CPM_ARGS_FORCE AND NOT "${CPM_${CPM_ARGS_NAME}_SOURCE}" STREQUAL "") + set(PACKAGE_SOURCE ${CPM_${CPM_ARGS_NAME}_SOURCE}) + set(CPM_${CPM_ARGS_NAME}_SOURCE "") + CPMAddPackage( + NAME "${CPM_ARGS_NAME}" + SOURCE_DIR "${PACKAGE_SOURCE}" + EXCLUDE_FROM_ALL "${CPM_ARGS_EXCLUDE_FROM_ALL}" + SYSTEM "${CPM_ARGS_SYSTEM}" + PATCHES "${CPM_ARGS_PATCHES}" + OPTIONS "${CPM_ARGS_OPTIONS}" + SOURCE_SUBDIR "${CPM_ARGS_SOURCE_SUBDIR}" + DOWNLOAD_ONLY "${DOWNLOAD_ONLY}" + FORCE True + ) + cpm_export_variables(${CPM_ARGS_NAME}) + return() + endif() + + # Check for available declaration + if(NOT CPM_ARGS_FORCE AND NOT "${CPM_DECLARATION_${CPM_ARGS_NAME}}" STREQUAL "") + set(declaration ${CPM_DECLARATION_${CPM_ARGS_NAME}}) + set(CPM_DECLARATION_${CPM_ARGS_NAME} "") + CPMAddPackage(${declaration}) + cpm_export_variables(${CPM_ARGS_NAME}) + # checking again to ensure version and option compatibility + cpm_check_if_package_already_added(${CPM_ARGS_NAME} "${CPM_ARGS_VERSION}") + return() + endif() + + if(NOT CPM_ARGS_FORCE) + if(CPM_USE_LOCAL_PACKAGES OR CPM_LOCAL_PACKAGES_ONLY) + cpm_find_package(${CPM_ARGS_NAME} "${CPM_ARGS_VERSION}" ${CPM_ARGS_FIND_PACKAGE_ARGUMENTS}) + + if(CPM_PACKAGE_FOUND) + cpm_export_variables(${CPM_ARGS_NAME}) + return() + endif() + + if(CPM_LOCAL_PACKAGES_ONLY) + message( + SEND_ERROR + "${CPM_INDENT} ${CPM_ARGS_NAME} not found via find_package(${CPM_ARGS_NAME} ${CPM_ARGS_VERSION})" + ) + endif() + endif() + endif() + + CPMRegisterPackage("${CPM_ARGS_NAME}" "${CPM_ARGS_VERSION}") + + if(DEFINED CPM_ARGS_GIT_TAG) + set(PACKAGE_INFO "${CPM_ARGS_GIT_TAG}") + elseif(DEFINED CPM_ARGS_SOURCE_DIR) + set(PACKAGE_INFO "${CPM_ARGS_SOURCE_DIR}") + else() + set(PACKAGE_INFO "${CPM_ARGS_VERSION}") + endif() + + if(DEFINED FETCHCONTENT_BASE_DIR) + # respect user's FETCHCONTENT_BASE_DIR if set + set(CPM_FETCHCONTENT_BASE_DIR ${FETCHCONTENT_BASE_DIR}) + else() + set(CPM_FETCHCONTENT_BASE_DIR ${CMAKE_BINARY_DIR}/_deps) + endif() + + cpm_add_patches(${CPM_ARGS_PATCHES}) + + if(DEFINED CPM_ARGS_DOWNLOAD_COMMAND) + list(APPEND CPM_ARGS_UNPARSED_ARGUMENTS DOWNLOAD_COMMAND ${CPM_ARGS_DOWNLOAD_COMMAND}) + elseif(DEFINED CPM_ARGS_SOURCE_DIR) + list(APPEND CPM_ARGS_UNPARSED_ARGUMENTS SOURCE_DIR ${CPM_ARGS_SOURCE_DIR}) + if(NOT IS_ABSOLUTE ${CPM_ARGS_SOURCE_DIR}) + # Expand `CPM_ARGS_SOURCE_DIR` relative path. This is important because EXISTS doesn't work + # for relative paths. + get_filename_component( + source_directory ${CPM_ARGS_SOURCE_DIR} REALPATH BASE_DIR ${CMAKE_CURRENT_BINARY_DIR} + ) + else() + set(source_directory ${CPM_ARGS_SOURCE_DIR}) + endif() + if(NOT EXISTS ${source_directory}) + string(TOLOWER ${CPM_ARGS_NAME} lower_case_name) + # remove timestamps so CMake will re-download the dependency + file(REMOVE_RECURSE "${CPM_FETCHCONTENT_BASE_DIR}/${lower_case_name}-subbuild") + endif() + elseif(CPM_SOURCE_CACHE AND NOT CPM_ARGS_NO_CACHE) + string(TOLOWER ${CPM_ARGS_NAME} lower_case_name) + set(origin_parameters ${CPM_ARGS_UNPARSED_ARGUMENTS}) + list(SORT origin_parameters) + if(CPM_ARGS_CUSTOM_CACHE_KEY) + # Application set a custom unique directory name + set(download_directory ${CPM_SOURCE_CACHE}/${lower_case_name}/${CPM_ARGS_CUSTOM_CACHE_KEY}) + elseif(CPM_USE_NAMED_CACHE_DIRECTORIES) + string(SHA1 origin_hash "${origin_parameters};NEW_CACHE_STRUCTURE_TAG") + set(download_directory ${CPM_SOURCE_CACHE}/${lower_case_name}/${origin_hash}/${CPM_ARGS_NAME}) + else() + string(SHA1 origin_hash "${origin_parameters}") + set(download_directory ${CPM_SOURCE_CACHE}/${lower_case_name}/${origin_hash}) + endif() + # Expand `download_directory` relative path. This is important because EXISTS doesn't work for + # relative paths. + get_filename_component(download_directory ${download_directory} ABSOLUTE) + list(APPEND CPM_ARGS_UNPARSED_ARGUMENTS SOURCE_DIR ${download_directory}) + + if(CPM_SOURCE_CACHE) + file(LOCK ${download_directory}/../cmake.lock) + endif() + + if(EXISTS ${download_directory}) + if(CPM_SOURCE_CACHE) + file(LOCK ${download_directory}/../cmake.lock RELEASE) + endif() + + cpm_store_fetch_properties( + ${CPM_ARGS_NAME} "${download_directory}" + "${CPM_FETCHCONTENT_BASE_DIR}/${lower_case_name}-build" + ) + cpm_get_fetch_properties("${CPM_ARGS_NAME}") + + if(DEFINED CPM_ARGS_GIT_TAG AND NOT (PATCH_COMMAND IN_LIST CPM_ARGS_UNPARSED_ARGUMENTS)) + # warn if cache has been changed since checkout + cpm_check_git_working_dir_is_clean(${download_directory} ${CPM_ARGS_GIT_TAG} IS_CLEAN) + if(NOT ${IS_CLEAN}) + message( + WARNING "${CPM_INDENT} Cache for ${CPM_ARGS_NAME} (${download_directory}) is dirty" + ) + endif() + endif() + + cpm_add_subdirectory( + "${CPM_ARGS_NAME}" + "${DOWNLOAD_ONLY}" + "${${CPM_ARGS_NAME}_SOURCE_DIR}/${CPM_ARGS_SOURCE_SUBDIR}" + "${${CPM_ARGS_NAME}_BINARY_DIR}" + "${CPM_ARGS_EXCLUDE_FROM_ALL}" + "${CPM_ARGS_SYSTEM}" + "${CPM_ARGS_OPTIONS}" + ) + set(PACKAGE_INFO "${PACKAGE_INFO} at ${download_directory}") + + # As the source dir is already cached/populated, we override the call to FetchContent. + set(CPM_SKIP_FETCH TRUE) + cpm_override_fetchcontent( + "${lower_case_name}" SOURCE_DIR "${${CPM_ARGS_NAME}_SOURCE_DIR}/${CPM_ARGS_SOURCE_SUBDIR}" + BINARY_DIR "${${CPM_ARGS_NAME}_BINARY_DIR}" + ) + + else() + # Enable shallow clone when GIT_TAG is not a commit hash. Our guess may not be accurate, but + # it should guarantee no commit hash get mis-detected. + if(NOT DEFINED CPM_ARGS_GIT_SHALLOW) + cpm_is_git_tag_commit_hash("${CPM_ARGS_GIT_TAG}" IS_HASH) + if(NOT ${IS_HASH}) + list(APPEND CPM_ARGS_UNPARSED_ARGUMENTS GIT_SHALLOW TRUE) + endif() + endif() + + # remove timestamps so CMake will re-download the dependency + file(REMOVE_RECURSE ${CPM_FETCHCONTENT_BASE_DIR}/${lower_case_name}-subbuild) + set(PACKAGE_INFO "${PACKAGE_INFO} to ${download_directory}") + endif() + endif() + + cpm_create_module_file(${CPM_ARGS_NAME} "CPMAddPackage(\"${ARGN}\")") + + if(CPM_PACKAGE_LOCK_ENABLED) + if((CPM_ARGS_VERSION AND NOT CPM_ARGS_SOURCE_DIR) OR CPM_INCLUDE_ALL_IN_PACKAGE_LOCK) + cpm_add_to_package_lock(${CPM_ARGS_NAME} "${ARGN}") + elseif(CPM_ARGS_SOURCE_DIR) + cpm_add_comment_to_package_lock(${CPM_ARGS_NAME} "local directory") + else() + cpm_add_comment_to_package_lock(${CPM_ARGS_NAME} "${ARGN}") + endif() + endif() + + cpm_message( + STATUS "${CPM_INDENT} Adding package ${CPM_ARGS_NAME}@${CPM_ARGS_VERSION} (${PACKAGE_INFO})" + ) + + if(NOT CPM_SKIP_FETCH) + # CMake 3.28 added EXCLUDE, SYSTEM (3.25), and SOURCE_SUBDIR (3.18) to FetchContent_Declare. + # Calling FetchContent_MakeAvailable will then internally forward these options to + # add_subdirectory. Up until these changes, we had to call FetchContent_Populate and + # add_subdirectory separately, which is no longer necessary and has been deprecated as of 3.30. + set(fetchContentDeclareExtraArgs "") + if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.28.0") + if(${CPM_ARGS_EXCLUDE_FROM_ALL}) + list(APPEND fetchContentDeclareExtraArgs EXCLUDE_FROM_ALL) + endif() + if(${CPM_ARGS_SYSTEM}) + list(APPEND fetchContentDeclareExtraArgs SYSTEM) + endif() + if(DEFINED CPM_ARGS_SOURCE_SUBDIR) + list(APPEND fetchContentDeclareExtraArgs SOURCE_SUBDIR ${CPM_ARGS_SOURCE_SUBDIR}) + endif() + # For CMake version <3.28 OPTIONS are parsed in cpm_add_subdirectory + if(CPM_ARGS_OPTIONS AND NOT DOWNLOAD_ONLY) + foreach(OPTION ${CPM_ARGS_OPTIONS}) + cpm_parse_option("${OPTION}") + set(${OPTION_KEY} "${OPTION_VALUE}") + endforeach() + endif() + endif() + cpm_declare_fetch( + "${CPM_ARGS_NAME}" ${fetchContentDeclareExtraArgs} "${CPM_ARGS_UNPARSED_ARGUMENTS}" + ) + + cpm_fetch_package("${CPM_ARGS_NAME}" ${DOWNLOAD_ONLY} populated ${CPM_ARGS_UNPARSED_ARGUMENTS}) + if(CPM_SOURCE_CACHE AND download_directory) + file(LOCK ${download_directory}/../cmake.lock RELEASE) + endif() + if(${populated} AND ${CMAKE_VERSION} VERSION_LESS "3.28.0") + cpm_add_subdirectory( + "${CPM_ARGS_NAME}" + "${DOWNLOAD_ONLY}" + "${${CPM_ARGS_NAME}_SOURCE_DIR}/${CPM_ARGS_SOURCE_SUBDIR}" + "${${CPM_ARGS_NAME}_BINARY_DIR}" + "${CPM_ARGS_EXCLUDE_FROM_ALL}" + "${CPM_ARGS_SYSTEM}" + "${CPM_ARGS_OPTIONS}" + ) + endif() + cpm_get_fetch_properties("${CPM_ARGS_NAME}") + endif() + + set(${CPM_ARGS_NAME}_ADDED YES) + cpm_export_variables("${CPM_ARGS_NAME}") +endfunction() + +# Fetch a previously declared package +macro(CPMGetPackage Name) + if(DEFINED "CPM_DECLARATION_${Name}") + CPMAddPackage(NAME ${Name}) + else() + message(SEND_ERROR "${CPM_INDENT} Cannot retrieve package ${Name}: no declaration available") + endif() +endmacro() + +# export variables available to the caller to the parent scope expects ${CPM_ARGS_NAME} to be set +macro(cpm_export_variables name) + set(${name}_SOURCE_DIR + "${${name}_SOURCE_DIR}" + PARENT_SCOPE + ) + set(${name}_BINARY_DIR + "${${name}_BINARY_DIR}" + PARENT_SCOPE + ) + set(${name}_ADDED + "${${name}_ADDED}" + PARENT_SCOPE + ) + set(CPM_LAST_PACKAGE_NAME + "${name}" + PARENT_SCOPE + ) +endmacro() + +# declares a package, so that any call to CPMAddPackage for the package name will use these +# arguments instead. Previous declarations will not be overridden. +macro(CPMDeclarePackage Name) + if(NOT DEFINED "CPM_DECLARATION_${Name}") + set("CPM_DECLARATION_${Name}" "${ARGN}") + endif() +endmacro() + +function(cpm_add_to_package_lock Name) + if(NOT CPM_DONT_CREATE_PACKAGE_LOCK) + cpm_prettify_package_arguments(PRETTY_ARGN false ${ARGN}) + file(APPEND ${CPM_PACKAGE_LOCK_FILE} "# ${Name}\nCPMDeclarePackage(${Name}\n${PRETTY_ARGN})\n") + endif() +endfunction() + +function(cpm_add_comment_to_package_lock Name) + if(NOT CPM_DONT_CREATE_PACKAGE_LOCK) + cpm_prettify_package_arguments(PRETTY_ARGN true ${ARGN}) + file(APPEND ${CPM_PACKAGE_LOCK_FILE} + "# ${Name} (unversioned)\n# CPMDeclarePackage(${Name}\n${PRETTY_ARGN}#)\n" + ) + endif() +endfunction() + +# includes the package lock file if it exists and creates a target `cpm-update-package-lock` to +# update it +macro(CPMUsePackageLock file) + if(NOT CPM_DONT_CREATE_PACKAGE_LOCK) + get_filename_component(CPM_ABSOLUTE_PACKAGE_LOCK_PATH ${file} ABSOLUTE) + if(EXISTS ${CPM_ABSOLUTE_PACKAGE_LOCK_PATH}) + include(${CPM_ABSOLUTE_PACKAGE_LOCK_PATH}) + endif() + if(NOT TARGET cpm-update-package-lock) + add_custom_target( + cpm-update-package-lock COMMAND ${CMAKE_COMMAND} -E copy ${CPM_PACKAGE_LOCK_FILE} + ${CPM_ABSOLUTE_PACKAGE_LOCK_PATH} + ) + endif() + set(CPM_PACKAGE_LOCK_ENABLED true) + endif() +endmacro() + +# registers a package that has been added to CPM +function(CPMRegisterPackage PACKAGE VERSION) + list(APPEND CPM_PACKAGES ${PACKAGE}) + set(CPM_PACKAGES + ${CPM_PACKAGES} + CACHE INTERNAL "" + ) + set("CPM_PACKAGE_${PACKAGE}_VERSION" + ${VERSION} + CACHE INTERNAL "" + ) +endfunction() + +# retrieve the current version of the package to ${OUTPUT} +function(CPMGetPackageVersion PACKAGE OUTPUT) + set(${OUTPUT} + "${CPM_PACKAGE_${PACKAGE}_VERSION}" + PARENT_SCOPE + ) +endfunction() + +# declares a package in FetchContent_Declare +function(cpm_declare_fetch PACKAGE) + if(${CPM_DRY_RUN}) + cpm_message(STATUS "${CPM_INDENT} Package not declared (dry run)") + return() + endif() + + FetchContent_Declare(${PACKAGE} ${ARGN}) +endfunction() + +# returns properties for a package previously defined by cpm_declare_fetch +function(cpm_get_fetch_properties PACKAGE) + if(${CPM_DRY_RUN}) + return() + endif() + + set(${PACKAGE}_SOURCE_DIR + "${CPM_PACKAGE_${PACKAGE}_SOURCE_DIR}" + PARENT_SCOPE + ) + set(${PACKAGE}_BINARY_DIR + "${CPM_PACKAGE_${PACKAGE}_BINARY_DIR}" + PARENT_SCOPE + ) +endfunction() + +function(cpm_store_fetch_properties PACKAGE source_dir binary_dir) + if(${CPM_DRY_RUN}) + return() + endif() + + set(CPM_PACKAGE_${PACKAGE}_SOURCE_DIR + "${source_dir}" + CACHE INTERNAL "" + ) + set(CPM_PACKAGE_${PACKAGE}_BINARY_DIR + "${binary_dir}" + CACHE INTERNAL "" + ) +endfunction() + +# adds a package as a subdirectory if viable, according to provided options +function( + cpm_add_subdirectory + PACKAGE + DOWNLOAD_ONLY + SOURCE_DIR + BINARY_DIR + EXCLUDE + SYSTEM + OPTIONS +) + + if(NOT DOWNLOAD_ONLY AND EXISTS ${SOURCE_DIR}/CMakeLists.txt) + set(addSubdirectoryExtraArgs "") + if(EXCLUDE) + list(APPEND addSubdirectoryExtraArgs EXCLUDE_FROM_ALL) + endif() + if("${SYSTEM}" AND "${CMAKE_VERSION}" VERSION_GREATER_EQUAL "3.25") + # https://cmake.org/cmake/help/latest/prop_dir/SYSTEM.html#prop_dir:SYSTEM + list(APPEND addSubdirectoryExtraArgs SYSTEM) + endif() + if(OPTIONS) + foreach(OPTION ${OPTIONS}) + cpm_parse_option("${OPTION}") + set(${OPTION_KEY} "${OPTION_VALUE}") + endforeach() + endif() + set(CPM_OLD_INDENT "${CPM_INDENT}") + set(CPM_INDENT "${CPM_INDENT} ${PACKAGE}:") + add_subdirectory(${SOURCE_DIR} ${BINARY_DIR} ${addSubdirectoryExtraArgs}) + set(CPM_INDENT "${CPM_OLD_INDENT}") + endif() +endfunction() + +# downloads a previously declared package via FetchContent and exports the variables +# `${PACKAGE}_SOURCE_DIR` and `${PACKAGE}_BINARY_DIR` to the parent scope +function(cpm_fetch_package PACKAGE DOWNLOAD_ONLY populated) + set(${populated} + FALSE + PARENT_SCOPE + ) + if(${CPM_DRY_RUN}) + cpm_message(STATUS "${CPM_INDENT} Package ${PACKAGE} not fetched (dry run)") + return() + endif() + + FetchContent_GetProperties(${PACKAGE}) + + string(TOLOWER "${PACKAGE}" lower_case_name) + + if(NOT ${lower_case_name}_POPULATED) + if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.28.0") + if(DOWNLOAD_ONLY) + # MakeAvailable will call add_subdirectory internally which is not what we want when + # DOWNLOAD_ONLY is set. Populate will only download the dependency without adding it to the + # build + FetchContent_Populate( + ${PACKAGE} + SOURCE_DIR "${CPM_FETCHCONTENT_BASE_DIR}/${lower_case_name}-src" + BINARY_DIR "${CPM_FETCHCONTENT_BASE_DIR}/${lower_case_name}-build" + SUBBUILD_DIR "${CPM_FETCHCONTENT_BASE_DIR}/${lower_case_name}-subbuild" + ${ARGN} + ) + else() + FetchContent_MakeAvailable(${PACKAGE}) + endif() + else() + FetchContent_Populate(${PACKAGE}) + endif() + set(${populated} + TRUE + PARENT_SCOPE + ) + endif() + + cpm_store_fetch_properties( + ${CPM_ARGS_NAME} ${${lower_case_name}_SOURCE_DIR} ${${lower_case_name}_BINARY_DIR} + ) + + set(${PACKAGE}_SOURCE_DIR + ${${lower_case_name}_SOURCE_DIR} + PARENT_SCOPE + ) + set(${PACKAGE}_BINARY_DIR + ${${lower_case_name}_BINARY_DIR} + PARENT_SCOPE + ) +endfunction() + +# splits a package option +function(cpm_parse_option OPTION) + string(REGEX MATCH "^[^ ]+" OPTION_KEY "${OPTION}") + string(LENGTH "${OPTION}" OPTION_LENGTH) + string(LENGTH "${OPTION_KEY}" OPTION_KEY_LENGTH) + if(OPTION_KEY_LENGTH STREQUAL OPTION_LENGTH) + # no value for key provided, assume user wants to set option to "ON" + set(OPTION_VALUE "ON") + else() + math(EXPR OPTION_KEY_LENGTH "${OPTION_KEY_LENGTH}+1") + string(SUBSTRING "${OPTION}" "${OPTION_KEY_LENGTH}" "-1" OPTION_VALUE) + endif() + set(OPTION_KEY + "${OPTION_KEY}" + PARENT_SCOPE + ) + set(OPTION_VALUE + "${OPTION_VALUE}" + PARENT_SCOPE + ) +endfunction() + +# guesses the package version from a git tag +function(cpm_get_version_from_git_tag GIT_TAG RESULT) + string(LENGTH ${GIT_TAG} length) + if(length EQUAL 40) + # GIT_TAG is probably a git hash + set(${RESULT} + 0 + PARENT_SCOPE + ) + else() + string(REGEX MATCH "v?([0123456789.]*).*" _ ${GIT_TAG}) + set(${RESULT} + ${CMAKE_MATCH_1} + PARENT_SCOPE + ) + endif() +endfunction() + +# guesses if the git tag is a commit hash or an actual tag or a branch name. +function(cpm_is_git_tag_commit_hash GIT_TAG RESULT) + string(LENGTH "${GIT_TAG}" length) + # full hash has 40 characters, and short hash has at least 7 characters. + if(length LESS 7 OR length GREATER 40) + set(${RESULT} + 0 + PARENT_SCOPE + ) + else() + if(${GIT_TAG} MATCHES "^[a-fA-F0-9]+$") + set(${RESULT} + 1 + PARENT_SCOPE + ) + else() + set(${RESULT} + 0 + PARENT_SCOPE + ) + endif() + endif() +endfunction() + +function(cpm_prettify_package_arguments OUT_VAR IS_IN_COMMENT) + set(oneValueArgs + NAME + FORCE + VERSION + GIT_TAG + DOWNLOAD_ONLY + GITHUB_REPOSITORY + GITLAB_REPOSITORY + BITBUCKET_REPOSITORY + GIT_REPOSITORY + SOURCE_DIR + FIND_PACKAGE_ARGUMENTS + NO_CACHE + SYSTEM + GIT_SHALLOW + EXCLUDE_FROM_ALL + SOURCE_SUBDIR + ) + set(multiValueArgs URL OPTIONS DOWNLOAD_COMMAND) + cmake_parse_arguments(CPM_ARGS "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + foreach(oneArgName ${oneValueArgs}) + if(DEFINED CPM_ARGS_${oneArgName}) + if(${IS_IN_COMMENT}) + string(APPEND PRETTY_OUT_VAR "#") + endif() + if(${oneArgName} STREQUAL "SOURCE_DIR") + string(REPLACE ${CMAKE_SOURCE_DIR} "\${CMAKE_SOURCE_DIR}" CPM_ARGS_${oneArgName} + ${CPM_ARGS_${oneArgName}} + ) + endif() + string(APPEND PRETTY_OUT_VAR " ${oneArgName} ${CPM_ARGS_${oneArgName}}\n") + endif() + endforeach() + foreach(multiArgName ${multiValueArgs}) + if(DEFINED CPM_ARGS_${multiArgName}) + if(${IS_IN_COMMENT}) + string(APPEND PRETTY_OUT_VAR "#") + endif() + string(APPEND PRETTY_OUT_VAR " ${multiArgName}\n") + foreach(singleOption ${CPM_ARGS_${multiArgName}}) + if(${IS_IN_COMMENT}) + string(APPEND PRETTY_OUT_VAR "#") + endif() + string(APPEND PRETTY_OUT_VAR " \"${singleOption}\"\n") + endforeach() + endif() + endforeach() + + if(NOT "${CPM_ARGS_UNPARSED_ARGUMENTS}" STREQUAL "") + if(${IS_IN_COMMENT}) + string(APPEND PRETTY_OUT_VAR "#") + endif() + string(APPEND PRETTY_OUT_VAR " ") + foreach(CPM_ARGS_UNPARSED_ARGUMENT ${CPM_ARGS_UNPARSED_ARGUMENTS}) + string(APPEND PRETTY_OUT_VAR " ${CPM_ARGS_UNPARSED_ARGUMENT}") + endforeach() + string(APPEND PRETTY_OUT_VAR "\n") + endif() + + set(${OUT_VAR} + ${PRETTY_OUT_VAR} + PARENT_SCOPE + ) + +endfunction() diff --git a/cmake/StlabUtil.cmake b/cmake/StlabUtil.cmake index 35fdb665..3e362784 100644 --- a/cmake/StlabUtil.cmake +++ b/cmake/StlabUtil.cmake @@ -181,8 +181,8 @@ function( stlab_generate_config_file ) endif() configure_file( - "${PROJECT_SOURCE_DIR}/stlab/config.hpp.in" - "${PROJECT_BINARY_DIR}/stlab/config.hpp" + "${PROJECT_SOURCE_DIR}/include/stlab/config.hpp.in" + "${PROJECT_BINARY_DIR}/include/stlab/config.hpp" @ONLY ) endfunction() diff --git a/cmake/stlab/development.cmake b/cmake/stlab/development.cmake index 2390d140..a87ebd84 100644 --- a/cmake/stlab/development.cmake +++ b/cmake/stlab/development.cmake @@ -1,7 +1,16 @@ -add_library( development INTERFACE ) -add_library( stlab::development ALIAS development ) +add_library(development INTERFACE) +add_library(stlab::development ALIAS development) -include( stlab/development/AppleClang ) -include( stlab/development/Clang ) -include( stlab/development/GNU ) -include( stlab/development/MSVC ) +include(stlab/development/AppleClang) +include(stlab/development/Clang) +include(stlab/development/GNU) +include(stlab/development/MSVC) + +if(STLAB_SANITIZER STREQUAL "address") + if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + add_compile_options(/fsanitize=address) + elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + add_compile_options(-fsanitize=address -fno-omit-frame-pointer) + add_link_options(-fsanitize=address) + endif() +endif() diff --git a/cmake/stlab/development/AppleClang.cmake b/cmake/stlab/development/AppleClang.cmake index a2db6a3a..0de0bf9f 100644 --- a/cmake/stlab/development/AppleClang.cmake +++ b/cmake/stlab/development/AppleClang.cmake @@ -1,4 +1,4 @@ -set( stlab_AppleClang_base_flags -Wall -Wextra -Wpedantic -Werror -ftemplate-backtrace-limit=0 ) +set( stlab_AppleClang_base_flags -Wall -Werror -ftemplate-backtrace-limit=0 ) set( stlab_AppleClang_debug_flags -gdwarf-3 ) set( stlab_AppleClang_coverage_flags --coverage ) set( stlab_AppleClang_release_flags ) @@ -18,4 +18,3 @@ target_compile_options(development INTERFACE target_link_libraries(development INTERFACE $<$:${generator}>) - diff --git a/cmake/stlab/development/Clang.cmake b/cmake/stlab/development/Clang.cmake index 02937937..6c14b99b 100644 --- a/cmake/stlab/development/Clang.cmake +++ b/cmake/stlab/development/Clang.cmake @@ -1,21 +1,20 @@ -set( stlab_Clang_base_flags -Wall -Wextra -Wpedantic -Werror -ftemplate-backtrace-limit=0 -DBOOST_NO_AUTO_PTR=1 ) -set( stlab_Clang_debug_flags -gdwarf-3 ) -set( stlab_Clang_coverage_flags --coverage ) -set( stlab_Clang_release_flags ) +set(stlab_Clang_base_flags -Wall -Werror -ftemplate-backtrace-limit=0) +set(stlab_Clang_debug_flags -gdwarf-3) +set(stlab_Clang_coverage_flags --coverage) +set(stlab_Clang_release_flags) string(CONCAT generator "${stlab_Clang_base_flags};" "$<$," - "$>:${stlab_Clang_debug_flags};>" + "$>:${stlab_Clang_debug_flags};>" "$<$," - "$," - "$>:${stlab_Clang_release_flags};>" + "$," + "$>:${stlab_Clang_release_flags};>" "$<$," - "$>:${stlab_Clang_debug_flags};>") + "$>:${stlab_Clang_debug_flags};>") target_compile_options(development INTERFACE $<$:${generator}>) target_link_libraries(development INTERFACE $<$:${generator}>) - diff --git a/cmake/stlab/development/GNU.cmake b/cmake/stlab/development/GNU.cmake index 20f8e004..af85d973 100644 --- a/cmake/stlab/development/GNU.cmake +++ b/cmake/stlab/development/GNU.cmake @@ -1,4 +1,4 @@ -set( stlab_GNU_base_flags -Wall -Wextra -Wpedantic -Werror -ftemplate-backtrace-limit=0 ) +set( stlab_GNU_base_flags -Wall -Werror -ftemplate-backtrace-limit=0 ) set( stlab_GNU_debug_flags -gdwarf-3 ) set( stlab_GNU_coverage_flags --coverage ) set( stlab_GNU_release_flags ) diff --git a/cmake/stlab/development/MSVC.cmake b/cmake/stlab/development/MSVC.cmake index a155d8bb..1337e4fc 100644 --- a/cmake/stlab/development/MSVC.cmake +++ b/cmake/stlab/development/MSVC.cmake @@ -1,17 +1,38 @@ -set( stlab_MSVC_base_flags /W3 /WX /D_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS /bigobj /Zc:__cplusplus) -set( stlab_MSVC_debug_flags ) -set( stlab_MSVC_coverage_flags ) -set( stlab_MSVC_release_flags ) +set(stlab_MSVC_base_flags + /permissive- # Strict standards conformance + /W4 # Warning level 4 + /WX # Treat warnings as errors + /bigobj # Increase object file section limit + # /D_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS + /Zc:__cplusplus # Correct __cplusplus macro + /Zc:preprocessor # Standards-conforming preprocessor + /Zc:inline # Remove unreferenced functions + /Zc:externConstexpr # Enable external constexpr + /Zc:throwingNew # Assume operator new throws + /Zc:hiddenFriend # Conform to hidden friend lookup rules + /Zc:referenceBinding # Enforce reference binding rules + /Zc:rvalueCast # Enforce type conversion rules + /Zc:strictStrings # Disable string literal type conversion + /Zc:templateScope # Fix template parameter scope + /Zc:ternary # Enforce conditional operator rules + /volatile:iso # Use ISO-compliant volatile +) +set(stlab_MSVC_debug_flags + /analyze:external- # Static analysis but filter external headers (boost test) +) +set(stlab_MSVC_coverage_flags) +set(stlab_MSVC_release_flags) string(CONCAT generator - "${stlab_MSVC_base_flags};" - "$<$," - "$>:${stlab_MSVC_debug_flags};>" - "$<$," - "$," - "$>:${stlab_MSVC_release_flags};>" - "$<$," - "$>:${stlab_MSVC_debug_flags};>") + "${stlab_MSVC_base_flags};" + "$<$," + "$>:${stlab_MSVC_debug_flags};>" + "$<$," + "$," + "$>:${stlab_MSVC_release_flags};>" + "$<$," + "$>:${stlab_MSVC_debug_flags};>") + target_compile_options(development INTERFACE - $<$:${generator}>) + $<$:${generator}>) diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt index f6befbda..af9b921f 100644 --- a/docs/CMakeLists.txt +++ b/docs/CMakeLists.txt @@ -10,7 +10,6 @@ find_package( Boost 1.60.0 REQUIRED ) include_directories(${Boost_INCLUDE_DIRS}) -enable_testing() foreach( path IN LISTS examples ) if (NOT (path MATCHES "operator_co_await_example\.cpp" OR path MATCHES "scope_example_return\.cpp") ) string( FIND "${path}" "." target REVERSE ) diff --git a/stlab/CMakeLists.txt b/include/stlab/CMakeLists.txt similarity index 100% rename from stlab/CMakeLists.txt rename to include/stlab/CMakeLists.txt diff --git a/stlab/algorithm/reverse.hpp b/include/stlab/algorithm/reverse.hpp similarity index 100% rename from stlab/algorithm/reverse.hpp rename to include/stlab/algorithm/reverse.hpp diff --git a/stlab/concurrency/await.hpp b/include/stlab/concurrency/await.hpp similarity index 100% rename from stlab/concurrency/await.hpp rename to include/stlab/concurrency/await.hpp diff --git a/stlab/concurrency/channel.hpp b/include/stlab/concurrency/channel.hpp similarity index 100% rename from stlab/concurrency/channel.hpp rename to include/stlab/concurrency/channel.hpp diff --git a/stlab/concurrency/concurrency.hpp b/include/stlab/concurrency/concurrency.hpp similarity index 100% rename from stlab/concurrency/concurrency.hpp rename to include/stlab/concurrency/concurrency.hpp diff --git a/stlab/concurrency/default_executor.hpp b/include/stlab/concurrency/default_executor.hpp similarity index 100% rename from stlab/concurrency/default_executor.hpp rename to include/stlab/concurrency/default_executor.hpp diff --git a/stlab/concurrency/executor_base.hpp b/include/stlab/concurrency/executor_base.hpp similarity index 100% rename from stlab/concurrency/executor_base.hpp rename to include/stlab/concurrency/executor_base.hpp diff --git a/stlab/concurrency/future.hpp b/include/stlab/concurrency/future.hpp similarity index 100% rename from stlab/concurrency/future.hpp rename to include/stlab/concurrency/future.hpp diff --git a/stlab/concurrency/immediate_executor.hpp b/include/stlab/concurrency/immediate_executor.hpp similarity index 100% rename from stlab/concurrency/immediate_executor.hpp rename to include/stlab/concurrency/immediate_executor.hpp diff --git a/stlab/concurrency/main_executor.hpp b/include/stlab/concurrency/main_executor.hpp similarity index 100% rename from stlab/concurrency/main_executor.hpp rename to include/stlab/concurrency/main_executor.hpp diff --git a/stlab/concurrency/progress.hpp b/include/stlab/concurrency/progress.hpp similarity index 100% rename from stlab/concurrency/progress.hpp rename to include/stlab/concurrency/progress.hpp diff --git a/stlab/concurrency/ready_future.hpp b/include/stlab/concurrency/ready_future.hpp similarity index 100% rename from stlab/concurrency/ready_future.hpp rename to include/stlab/concurrency/ready_future.hpp diff --git a/stlab/concurrency/serial_queue.hpp b/include/stlab/concurrency/serial_queue.hpp similarity index 100% rename from stlab/concurrency/serial_queue.hpp rename to include/stlab/concurrency/serial_queue.hpp diff --git a/stlab/concurrency/set_current_thread_name.hpp b/include/stlab/concurrency/set_current_thread_name.hpp similarity index 100% rename from stlab/concurrency/set_current_thread_name.hpp rename to include/stlab/concurrency/set_current_thread_name.hpp diff --git a/stlab/concurrency/system_timer.hpp b/include/stlab/concurrency/system_timer.hpp old mode 100755 new mode 100644 similarity index 98% rename from stlab/concurrency/system_timer.hpp rename to include/stlab/concurrency/system_timer.hpp index 02bf7b9d..e4c6c446 --- a/stlab/concurrency/system_timer.hpp +++ b/include/stlab/concurrency/system_timer.hpp @@ -127,7 +127,10 @@ class system_timer { auto file_time = duration_to_FILETIME(duration); +#pragma warning(push) +#pragma warning(disable : 6553) // bad annotation on SetThreadpoolTimer SetThreadpoolTimer(timer, &file_time, 0, 0); +#pragma warning(pop) } private: diff --git a/stlab/concurrency/task.hpp b/include/stlab/concurrency/task.hpp similarity index 100% rename from stlab/concurrency/task.hpp rename to include/stlab/concurrency/task.hpp diff --git a/stlab/concurrency/traits.hpp b/include/stlab/concurrency/traits.hpp similarity index 100% rename from stlab/concurrency/traits.hpp rename to include/stlab/concurrency/traits.hpp diff --git a/stlab/concurrency/tuple_algorithm.hpp b/include/stlab/concurrency/tuple_algorithm.hpp similarity index 98% rename from stlab/concurrency/tuple_algorithm.hpp rename to include/stlab/concurrency/tuple_algorithm.hpp index 69e3fff4..2434d9e1 100644 --- a/stlab/concurrency/tuple_algorithm.hpp +++ b/include/stlab/concurrency/tuple_algorithm.hpp @@ -110,8 +110,8 @@ struct void_i_impl { */ template auto tuple_find(const T& t, Op op) -> std::size_t { - if (std::tuple_size::value == 0) return 1; - return detail::tuple_find_impl<0, std::tuple_size::value, T, Op>::find(t, op); + if constexpr (std::tuple_size::value == 0) return 1; + else return detail::tuple_find_impl<0, std::tuple_size::value, T, Op>::find(t, op); } /* diff --git a/stlab/concurrency/utility.hpp b/include/stlab/concurrency/utility.hpp similarity index 100% rename from stlab/concurrency/utility.hpp rename to include/stlab/concurrency/utility.hpp diff --git a/stlab/config.hpp.in b/include/stlab/config.hpp.in similarity index 100% rename from stlab/config.hpp.in rename to include/stlab/config.hpp.in diff --git a/stlab/copy_on_write.hpp b/include/stlab/copy_on_write.hpp similarity index 100% rename from stlab/copy_on_write.hpp rename to include/stlab/copy_on_write.hpp diff --git a/stlab/enum_ops.hpp b/include/stlab/enum_ops.hpp similarity index 100% rename from stlab/enum_ops.hpp rename to include/stlab/enum_ops.hpp diff --git a/stlab/forest.hpp b/include/stlab/forest.hpp similarity index 100% rename from stlab/forest.hpp rename to include/stlab/forest.hpp diff --git a/stlab/forest_algorithms.hpp b/include/stlab/forest_algorithms.hpp similarity index 100% rename from stlab/forest_algorithms.hpp rename to include/stlab/forest_algorithms.hpp diff --git a/stlab/functional.hpp b/include/stlab/functional.hpp similarity index 100% rename from stlab/functional.hpp rename to include/stlab/functional.hpp diff --git a/stlab/iterator/concepts.hpp b/include/stlab/iterator/concepts.hpp similarity index 100% rename from stlab/iterator/concepts.hpp rename to include/stlab/iterator/concepts.hpp diff --git a/stlab/iterator/set_next.hpp b/include/stlab/iterator/set_next.hpp similarity index 100% rename from stlab/iterator/set_next.hpp rename to include/stlab/iterator/set_next.hpp diff --git a/stlab/memory.hpp b/include/stlab/memory.hpp similarity index 100% rename from stlab/memory.hpp rename to include/stlab/memory.hpp diff --git a/stlab/pre_exit.hpp b/include/stlab/pre_exit.hpp similarity index 100% rename from stlab/pre_exit.hpp rename to include/stlab/pre_exit.hpp diff --git a/stlab/scope.hpp b/include/stlab/scope.hpp similarity index 100% rename from stlab/scope.hpp rename to include/stlab/scope.hpp diff --git a/stlab/test/model.hpp b/include/stlab/test/model.hpp similarity index 100% rename from stlab/test/model.hpp rename to include/stlab/test/model.hpp diff --git a/stlab/utility.hpp b/include/stlab/utility.hpp similarity index 100% rename from stlab/utility.hpp rename to include/stlab/utility.hpp diff --git a/stlab/version.hpp b/include/stlab/version.hpp similarity index 100% rename from stlab/version.hpp rename to include/stlab/version.hpp diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 8dc156dd..1ccfd05b 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,4 +1,38 @@ -add_executable( stlab.test.channel +include(../cmake/CPM.cmake) +include(stlab/development) + +# test dependencies +## Boost + +set(BUILD_SHARED_LIBS OFF) +set(Boost_USE_STATIC_LIBS ON) + +# Set global sanitizer flags before any targets are created +if(STLAB_SANITIZER STREQUAL "address") + if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + add_compile_options(/fsanitize=address) + add_link_options(/fsanitize=address) + elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + add_compile_options(-fsanitize=address -fno-omit-frame-pointer) + add_link_options(-fsanitize=address) + endif() +endif() + +CPMAddPackage( + NAME Boost + VERSION 1.86.0 + URL https://github.com/boostorg/boost/releases/download/boost-1.86.0/boost-1.86.0-cmake.tar.xz + URL_HASH SHA256=2c5ec5edcdff47ff55e27ed9560b0a0b94b07bd07ed9928b476150e16b0efc57 + OPTIONS "BOOST_ENABLE_CMAKE ON" "BOOST_INCLUDE_LIBRARIES test" # Note the escapes! container\\\;asio +) + +# Mark the boost header files as external for MSVC +if (MSVC) + get_target_property(Boost_INCLUDE_DIR Boost::unit_test_framework INTERFACE_INCLUDE_DIRECTORIES) + add_compile_options(/external:I${Boost_INCLUDE_DIR} /external:W0) +endif() + +add_executable(stlab.test.channel channel_functor_tests.cpp channel_merge_round_robin_tests.cpp channel_merge_unordered_tests.cpp @@ -8,36 +42,53 @@ add_executable( stlab.test.channel channel_tests.cpp tuple_algorithm_test.cpp main.cpp - channel_test_helper.hpp ) + channel_test_helper.hpp) target_compile_definitions(stlab.test.channel PRIVATE STLAB_UNIT_TEST) -target_link_libraries( stlab.test.channel PUBLIC stlab::testing ) +target_link_libraries(stlab.test.channel PUBLIC stlab::testing) add_test( - NAME stlab.test.channel - COMMAND stlab.test.channel + NAME stlab.test.channel + COMMAND stlab.test.channel ) ################################################################################ +# +# Establish a convenience target to encapsulate the properties common to the +# stlab tests and establish an alias for uniformity. +# +add_library(testing INTERFACE) +add_library(stlab::testing ALIAS testing) -add_executable( stlab.test.executor - executor_test.cpp - main.cpp) +# +# CMake targets linking to the stlab::testing target will (transitively) +# link to the Boost::unit_test_framework and to stlab::stlab target. +# -target_compile_definitions(stlab.test.executor PRIVATE STLAB_UNIT_TEST) +target_link_libraries(testing INTERFACE + Boost::unit_test_framework + stlab::development + stlab::stlab) + +add_executable(stlab.test.executor + executor_test.cpp + main.cpp) -target_link_libraries( stlab.test.executor PUBLIC stlab::testing ) + + +target_compile_definitions(stlab.test.executor PRIVATE STLAB_UNIT_TEST) +target_link_libraries(stlab.test.executor PUBLIC stlab::testing) add_test( - NAME stlab.test.executor - COMMAND stlab.test.executor + NAME stlab.test.executor + COMMAND stlab.test.executor ) ################################################################################ -add_executable( stlab.test.future +add_executable(stlab.test.future future_recover_tests.cpp future_test_helper.cpp future_tests.cpp @@ -51,126 +102,126 @@ add_executable( stlab.test.future future_test_helper.hpp future_reduction_tests.cpp) -if( NOT STLAB_NO_STD_COROUTINES ) - target_sources( stlab.test.future PUBLIC future_coroutine_tests.cpp ) +if(NOT STLAB_NO_STD_COROUTINES) + target_sources(stlab.test.future PUBLIC future_coroutine_tests.cpp) endif() target_compile_definitions(stlab.test.future PRIVATE STLAB_UNIT_TEST) -target_link_libraries( stlab.test.future PUBLIC stlab::testing ) +target_link_libraries(stlab.test.future PUBLIC stlab::testing) add_test( - NAME stlab.test.future - COMMAND stlab.test.future + NAME stlab.test.future + COMMAND stlab.test.future ) ################################################################################ -add_executable( stlab.test.serial_queue +add_executable(stlab.test.serial_queue serial_queue_test.cpp - main.cpp ) + main.cpp) target_compile_definitions(stlab.test.serial_queue PRIVATE STLAB_UNIT_TEST) -target_link_libraries( stlab.test.serial_queue PUBLIC stlab::testing ) +target_link_libraries(stlab.test.serial_queue PUBLIC stlab::testing) add_test( - NAME stlab.test.serial_queue - COMMAND stlab.test.serial_queue + NAME stlab.test.serial_queue + COMMAND stlab.test.serial_queue ) ################################################################################ -add_executable( stlab.test.cow +add_executable(stlab.test.cow cow_test.cpp - main.cpp ) + main.cpp) # Disable warning on GCC 11 and above for cow_test.cpp. See # github.com/stlab/libraries/issues/438 for details. -if( CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "11" ) - set_source_files_properties( cow_test.cpp PROPERTIES COMPILE_FLAGS -Wno-free-nonheap-object ) +if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "11") + set_source_files_properties(cow_test.cpp PROPERTIES COMPILE_FLAGS -Wno-free-nonheap-object) endif() target_compile_definitions(stlab.test.cow PRIVATE STLAB_UNIT_TEST) -target_link_libraries( stlab.test.cow PUBLIC stlab::testing ) +target_link_libraries(stlab.test.cow PUBLIC stlab::testing) add_test( - NAME stlab.test.cow - COMMAND stlab.test.cow + NAME stlab.test.cow + COMMAND stlab.test.cow ) ################################################################################ -add_executable( stlab.test.task +add_executable(stlab.test.task task_test.cpp - main.cpp ) + main.cpp) target_compile_definitions(stlab.test.task PRIVATE STLAB_UNIT_TEST) -target_link_libraries( stlab.test.task PUBLIC stlab::testing ) +target_link_libraries(stlab.test.task PUBLIC stlab::testing) add_test( - NAME stlab.test.task - COMMAND stlab.test.task + NAME stlab.test.task + COMMAND stlab.test.task ) ################################################################################ -add_executable( stlab.test.tuple +add_executable(stlab.test.tuple tuple_test.cpp - main.cpp ) + main.cpp) target_compile_definitions(stlab.test.channel PRIVATE STLAB_UNIT_TEST) -target_link_libraries( stlab.test.tuple PUBLIC stlab::testing ) +target_link_libraries(stlab.test.tuple PUBLIC stlab::testing) add_test( - NAME stlab.test.tuple - COMMAND stlab.test.tuple + NAME stlab.test.tuple + COMMAND stlab.test.tuple ) ################################################################################ -add_executable( stlab.test.traits - traits_test.cpp - main.cpp ) +add_executable(stlab.test.traits + traits_test.cpp + main.cpp) target_compile_definitions(stlab.test.channel PRIVATE STLAB_UNIT_TEST) -target_link_libraries( stlab.test.traits PUBLIC stlab::testing ) +target_link_libraries(stlab.test.traits PUBLIC stlab::testing) add_test( - NAME stlab.test.traits - COMMAND stlab.test.traits + NAME stlab.test.traits + COMMAND stlab.test.traits ) ################################################################################ -add_executable( stlab.test.forest - forest_test.cpp - main.cpp ) +add_executable(stlab.test.forest + forest_test.cpp + main.cpp) -target_link_libraries( stlab.test.forest PUBLIC stlab::testing ) +target_link_libraries(stlab.test.forest PUBLIC stlab::testing) add_test( - NAME stlab.test.forest - COMMAND stlab.test.forest + NAME stlab.test.forest + COMMAND stlab.test.forest ) ################################################################################ -add_executable( stlab.test.utility - utility_test.cpp - main.cpp ) +add_executable(stlab.test.utility + utility_test.cpp + main.cpp) -target_link_libraries( stlab.test.utility PUBLIC stlab::testing ) +target_link_libraries(stlab.test.utility PUBLIC stlab::testing) add_test( - NAME stlab.test.utility - COMMAND stlab.test.utility + NAME stlab.test.utility + COMMAND stlab.test.utility ) ################################################################################ @@ -186,7 +237,7 @@ set_target_properties( stlab.test.task stlab.test.tuple stlab.test.traits - PROPERTIES CXX_EXTENSIONS OFF ) + PROPERTIES CXX_EXTENSIONS OFF) # # Many of the stlab tests are executed using the system executor which defaults diff --git a/test/channel_process_tests.cpp b/test/channel_process_tests.cpp index c43e33b6..03e923b7 100644 --- a/test/channel_process_tests.cpp +++ b/test/channel_process_tests.cpp @@ -333,6 +333,8 @@ struct process_with_set_error { }; } // namespace +bool always_true{true}; // used to avoid unused variable warning + BOOST_AUTO_TEST_CASE(int_channel_process_set_error_is_called_on_upstream_error) { BOOST_TEST_MESSAGE("int channel process set_error is called on upstream error"); @@ -344,7 +346,7 @@ BOOST_AUTO_TEST_CASE(int_channel_process_set_error_is_called_on_upstream_error) auto result = receive | [](auto v) { - throw std::runtime_error{""}; + if (always_true) throw std::runtime_error{""}; return v; } | process_with_set_error{check} | [](int) {}; @@ -386,7 +388,7 @@ BOOST_AUTO_TEST_CASE(int_channel_process_close_is_called_on_upstream_error) { auto result = receive | [](auto v) { - throw std::runtime_error{""}; + if (always_true) throw std::runtime_error{""}; return v; } | process_with_close{check} | [](int) {}; diff --git a/test/executor_test.cpp b/test/executor_test.cpp index 7be6e1c9..90030666 100644 --- a/test/executor_test.cpp +++ b/test/executor_test.cpp @@ -19,55 +19,13 @@ #include #include -#include #include using namespace stlab; using namespace std; -// Use 'mpre' instead of 'mp' because the latter conflicts with Boost.Math <= 1.76 -namespace mpre = boost::multiprecision; - namespace { void rest() { std::this_thread::sleep_for(std::chrono::milliseconds(1)); } - -template -auto power(T x, N n, O op) -> T { - if (n == 0) return identity_element(op); - - while ((n & 1) == 0) { - n >>= 1; - x = op(x, x); - } - - T result = x; - n >>= 1; - while (n != 0) { - x = op(x, x); - if ((n & 1) != 0) result = op(result, x); - n >>= 1; - } - return result; -} - -template -struct multiply_2x2 { - auto operator()(const std::array& x, const std::array& y) -> std::array { - return {x[0] * y[0] + x[1] * y[2], x[0] * y[1] + x[1] * y[3], x[2] * y[0] + x[3] * y[2], - x[2] * y[1] + x[3] * y[3]}; - } -}; -template -auto identity_element(const multiply_2x2&) -> std::array { - return {N(1), N(0), N(0), N(1)}; -} - -template -auto fibonacci(N n) -> R { - if (n == 0) return R(0); - return power(std::array{1, 1, 1, 0}, N(n - 1), multiply_2x2())[0]; -} - } // namespace BOOST_AUTO_TEST_CASE(all_low_prio_tasks_are_executed) { @@ -187,6 +145,10 @@ BOOST_AUTO_TEST_CASE(task_system_restarts_after_it_went_pending) { BOOST_REQUIRE(!done); } +// REVISIT (sean-parent) - These tests is disabled because boost multi-precision is generated +// deprecated warnings. +#if 0 + namespace { auto fiboN{1000}; const auto iterations = 100'000; @@ -198,11 +160,7 @@ atomic_int defaultCount{0}; atomic_int lowCount{0}; atomic_int taskRunning{0}; -atomic_int done{0}; -atomic_int correctLow{0}; -atomic_int correctDefault{0}; -atomic_int correctHigh{0}; enum class executor_priority : std::uint8_t { high, medium, low }; @@ -340,3 +298,4 @@ BOOST_AUTO_TEST_CASE(MeasureTiming) { std::cout << "\nPerformance measuring: " << std::chrono::duration(stop - start).count() << "s\n"; } +#endif diff --git a/test/forest_test.cpp b/test/forest_test.cpp index 34b02f54..f7491daf 100644 --- a/test/forest_test.cpp +++ b/test/forest_test.cpp @@ -407,7 +407,7 @@ BOOST_AUTO_TEST_CASE(assignment) { } /* self-move assignment */ { - auto f{big_test_forest()}; + f = big_test_forest(); auto* pf{&f}; // We use a pointer here to get around a clang error when moving to self. auto f_size{f.size()}; f = std::move(*pf); diff --git a/test/future_tests.cpp b/test/future_tests.cpp index 5e433d2b..aa2ea9b5 100644 --- a/test/future_tests.cpp +++ b/test/future_tests.cpp @@ -555,10 +555,12 @@ BOOST_AUTO_TEST_CASE(future_wait_moveonly_value_and_timeout) { BOOST_REQUIRE_EQUAL(42, r.get_try()->member()); } +bool always_true{true}; // used to avoid unused variable warning + BOOST_AUTO_TEST_CASE(future_wait_moveonly_value_error_case_and_timeout) { BOOST_TEST_MESSAGE("future wait with moveonly value and timeout set"); auto answer = [] { - throw test_exception("failure"); + if (always_true) throw test_exception("failure"); return stlab::move_only(42); }; @@ -579,7 +581,7 @@ BOOST_AUTO_TEST_CASE(future_int_detach_without_execution) { } std::cout << counter; - BOOST_REQUIRE_EQUAL(0, counter.remaining()); + BOOST_REQUIRE_EQUAL(0u, counter.remaining()); BOOST_REQUIRE(check); } @@ -595,7 +597,7 @@ BOOST_AUTO_TEST_CASE(future_move_only_detach_without_execution) { } std::cout << counter; - BOOST_REQUIRE_EQUAL(0, counter.remaining()); + BOOST_REQUIRE_EQUAL(0u, counter.remaining()); BOOST_REQUIRE(check); } @@ -609,7 +611,7 @@ BOOST_AUTO_TEST_CASE(future_void_detach_without_execution) { } std::cout << counter; - BOOST_REQUIRE_EQUAL(0, counter.remaining()); + BOOST_REQUIRE_EQUAL(0u, counter.remaining()); BOOST_REQUIRE(check); } @@ -772,12 +774,12 @@ BOOST_AUTO_TEST_CASE(future_reduction_executor) { auto f = make_ready_future(5, outer_executor) | [&](int x) { return make_ready_future(x, inner_executor); }; - BOOST_REQUIRE_EQUAL(1, outer_count); - BOOST_REQUIRE_EQUAL(0, inner_count); + BOOST_REQUIRE_EQUAL(1u, outer_count); + BOOST_REQUIRE_EQUAL(0u, inner_count); auto f1 = f | [](int x) { return x; }; - BOOST_REQUIRE_EQUAL(2, outer_count); - BOOST_REQUIRE_EQUAL(0, inner_count); + BOOST_REQUIRE_EQUAL(2u, outer_count); + BOOST_REQUIRE_EQUAL(0u, inner_count); BOOST_REQUIRE_EQUAL(5, *f1.get_try()); } diff --git a/test/future_then_tests.cpp b/test/future_then_tests.cpp index c3ec2d8d..2fe39e6d 100644 --- a/test/future_then_tests.cpp +++ b/test/future_then_tests.cpp @@ -795,7 +795,7 @@ BOOST_AUTO_TEST_CASE(future_continuation_async_move_only_container) { check_valid_future(sut); auto result = stlab::await(std::move(sut)); - BOOST_REQUIRE_EQUAL(3, result.size()); + BOOST_REQUIRE_EQUAL(3u, result.size()); BOOST_REQUIRE_EQUAL(10, result[0].member()); BOOST_REQUIRE_EQUAL(42, result[1].member()); BOOST_REQUIRE_EQUAL(50, result[2].member()); @@ -818,7 +818,7 @@ BOOST_AUTO_TEST_CASE(future_continuation_async_move_only_container) { check_valid_future(sut); auto result = stlab::await(std::move(sut)); - BOOST_REQUIRE_EQUAL(3, result.size()); + BOOST_REQUIRE_EQUAL(3u, result.size()); BOOST_REQUIRE_EQUAL(10, result[0].member()); BOOST_REQUIRE_EQUAL(42, result[1].member()); BOOST_REQUIRE_EQUAL(50, result[2].member()); diff --git a/test/future_when_all_arguments_tests.cpp b/test/future_when_all_arguments_tests.cpp index f8edff61..8d0141e0 100644 --- a/test/future_when_all_arguments_tests.cpp +++ b/test/future_when_all_arguments_tests.cpp @@ -110,13 +110,13 @@ BOOST_AUTO_TEST_CASE(future_when_all_args_int_with_two_ready_element) { BOOST_AUTO_TEST_CASE(future_when_all_args) { auto main_thread_id = std::this_thread::get_id(); - auto sut = when_all( + auto r = when_all( make_executor<1>(), [] { return std::this_thread::get_id(); }, make_ready_future(stlab::immediate_executor)); - wait_until_future_completed(copy(sut)); + wait_until_future_completed(copy(r)); - BOOST_REQUIRE(main_thread_id != *sut.get_try()); + BOOST_REQUIRE(main_thread_id != *r.get_try()); BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter()); } @@ -133,7 +133,7 @@ BOOST_AUTO_TEST_CASE(future_when_all_Arguments_with_mutable_task) { mutable_int func1; mutable_int func2; - auto sut = when_all( + auto r = when_all( stlab::default_executor, [](auto f1, auto f2) { return f1() + f2(); }, async(stlab::default_executor, [func = func1]() mutable { @@ -145,7 +145,7 @@ BOOST_AUTO_TEST_CASE(future_when_all_Arguments_with_mutable_task) { return func; })); - BOOST_REQUIRE_EQUAL(4, stlab::await(std::move(sut))); + BOOST_REQUIRE_EQUAL(4, stlab::await(std::move(r))); } BOOST_AUTO_TEST_CASE(future_when_all_arguments_with_mutable_move_onlytask) { BOOST_TEST_MESSAGE("future when all arguments with mutable move only task"); @@ -160,7 +160,7 @@ BOOST_AUTO_TEST_CASE(future_when_all_arguments_with_mutable_move_onlytask) { mutable_move_only func1; mutable_move_only func2; - auto sut = when_all( + auto r = when_all( stlab::default_executor, [](auto f1, auto f2) { return f1().member() + f2().member(); }, async(stlab::default_executor, [func = std::move(func1)]() mutable { @@ -172,7 +172,7 @@ BOOST_AUTO_TEST_CASE(future_when_all_arguments_with_mutable_move_onlytask) { return std::move(func); })); - BOOST_REQUIRE_EQUAL(4, stlab::await(std::move(sut))); + BOOST_REQUIRE_EQUAL(4, stlab::await(std::move(r))); } BOOST_AUTO_TEST_SUITE_END() diff --git a/test/future_when_all_range_tests.cpp b/test/future_when_all_range_tests.cpp index 98c88737..090a2297 100644 --- a/test/future_when_all_range_tests.cpp +++ b/test/future_when_all_range_tests.cpp @@ -625,7 +625,7 @@ BOOST_AUTO_TEST_CASE( wait_until_future_fails(copy(sut)); check_failure(sut, "failure"); - BOOST_REQUIRE_EQUAL(0, r); + BOOST_REQUIRE_EQUAL(0u, r); } BOOST_AUTO_TEST_SUITE_END() From a2fb74ad361486668ae00974f4f8eb3166f9b5c6 Mon Sep 17 00:00:00 2001 From: Sean Parent Date: Fri, 17 Jan 2025 11:39:58 -0800 Subject: [PATCH 04/14] Documentation update. --- docs/.ruby-version | 2 +- docs/Gemfile | 9 +- docs/Gemfile.lock | 155 ++++++++++++++++------------- docs/_config.yml | 6 +- docs/_sass/_overrides-dark.scss | 4 + docs/_sass/_overrides-light.scss | 6 ++ docs/_sass/_overrides.scss | 3 +- docs/tools/docker-tools/Dockerfile | 33 +++--- docs/tools/docker-tools/README.md | 83 ++++++++++++--- docs/tools/docker-tools/VERSION | 2 +- docs/tools/docs/update.sh | 8 +- 11 files changed, 196 insertions(+), 115 deletions(-) diff --git a/docs/.ruby-version b/docs/.ruby-version index bea438e9..47b322c9 100644 --- a/docs/.ruby-version +++ b/docs/.ruby-version @@ -1 +1 @@ -3.3.1 +3.4.1 diff --git a/docs/Gemfile b/docs/Gemfile index a70bbcdb..016c511f 100644 --- a/docs/Gemfile +++ b/docs/Gemfile @@ -4,6 +4,11 @@ gem 'jekyll-redirect-from', group: [:jekyll_plugins] gem 'jekyll-compose', group: [:jekyll_plugins] gem "jekyll-remote-theme", group: [:jekyll_plugins] +# missing jekyll dependencies +gem 'csv' +gem 'base64' +gem 'logger' + # don't submit this line to the upstream repo -## Enable this line for local theme development -# gem 'jekyll-theme-adobe-hyde', path: '../../themes' +## [local-theme] Enable this line for local theme development +gem 'jekyll-theme-adobe-hyde', path: '../../themes' diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock index 46aa5151..f98fea61 100644 --- a/docs/Gemfile.lock +++ b/docs/Gemfile.lock @@ -1,39 +1,58 @@ +PATH + remote: ../../themes + specs: + jekyll-theme-adobe-hyde (2.0.2) + jekyll (~> 4.3) + jekyll-seo-tag (~> 2.0) + GEM remote: https://rubygems.org/ specs: - addressable (2.8.6) - public_suffix (>= 2.0.2, < 6.0) - bigdecimal (3.1.8) + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) + base64 (0.2.0) + bigdecimal (3.1.9) colorator (1.1.0) - concurrent-ruby (1.3.1) + concurrent-ruby (1.3.5) + csv (3.3.2) em-websocket (0.5.3) eventmachine (>= 0.12.9) http_parser.rb (~> 0) eventmachine (1.2.7) - ffi (1.16.3) + ffi (1.17.1) + ffi (1.17.1-aarch64-linux-gnu) + ffi (1.17.1-aarch64-linux-musl) + ffi (1.17.1-arm-linux-gnu) + ffi (1.17.1-arm-linux-musl) + ffi (1.17.1-arm64-darwin) + ffi (1.17.1-x86-linux-gnu) + ffi (1.17.1-x86-linux-musl) + ffi (1.17.1-x86_64-darwin) + ffi (1.17.1-x86_64-linux-gnu) + ffi (1.17.1-x86_64-linux-musl) forwardable-extended (2.6.0) - google-protobuf (4.27.0) + google-protobuf (4.29.3) bigdecimal rake (>= 13) - google-protobuf (4.27.0-aarch64-linux) + google-protobuf (4.29.3-aarch64-linux) bigdecimal rake (>= 13) - google-protobuf (4.27.0-arm64-darwin) + google-protobuf (4.29.3-arm64-darwin) bigdecimal rake (>= 13) - google-protobuf (4.27.0-x86-linux) + google-protobuf (4.29.3-x86-linux) bigdecimal rake (>= 13) - google-protobuf (4.27.0-x86_64-darwin) + google-protobuf (4.29.3-x86_64-darwin) bigdecimal rake (>= 13) - google-protobuf (4.27.0-x86_64-linux) + google-protobuf (4.29.3-x86_64-linux) bigdecimal rake (>= 13) http_parser.rb (0.8.0) - i18n (1.14.5) + i18n (1.14.6) concurrent-ruby (~> 1.0) - jekyll (4.3.3) + jekyll (4.3.4) addressable (~> 2.4) colorator (~> 1.0) em-websocket (~> 0.5) @@ -60,79 +79,70 @@ GEM rubyzip (>= 1.3.0, < 3.0) jekyll-sass-converter (3.0.0) sass-embedded (~> 1.54) + jekyll-seo-tag (2.8.0) + jekyll (>= 3.8, < 5.0) jekyll-watch (2.2.1) listen (~> 3.0) - kramdown (2.4.0) - rexml + kramdown (2.5.1) + rexml (>= 3.3.9) kramdown-parser-gfm (1.1.0) kramdown (~> 2.0) liquid (4.0.4) listen (3.9.0) rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) + logger (1.6.4) mercenary (0.4.0) pathutil (0.16.2) forwardable-extended (~> 2.6) - public_suffix (5.0.5) + public_suffix (6.0.1) rake (13.2.1) rb-fsevent (0.11.2) rb-inotify (0.11.1) ffi (~> 1.0) - rexml (3.2.8) - strscan (>= 3.0.9) - rouge (4.2.1) - rubyzip (2.3.2) + rexml (3.4.0) + rouge (4.5.1) + rubyzip (2.4.1) safe_yaml (1.0.5) - sass-embedded (1.77.4) - google-protobuf (>= 3.25, < 5.0) + sass-embedded (1.83.4) + google-protobuf (~> 4.29) rake (>= 13) - sass-embedded (1.77.4-aarch64-linux-android) - google-protobuf (>= 3.25, < 5.0) - sass-embedded (1.77.4-aarch64-linux-gnu) - google-protobuf (>= 3.25, < 5.0) - sass-embedded (1.77.4-aarch64-linux-musl) - google-protobuf (>= 3.25, < 5.0) - sass-embedded (1.77.4-aarch64-mingw-ucrt) - google-protobuf (>= 3.25, < 5.0) - sass-embedded (1.77.4-arm-linux-androideabi) - google-protobuf (>= 3.25, < 5.0) - sass-embedded (1.77.4-arm-linux-gnueabihf) - google-protobuf (>= 3.25, < 5.0) - sass-embedded (1.77.4-arm-linux-musleabihf) - google-protobuf (>= 3.25, < 5.0) - sass-embedded (1.77.4-arm64-darwin) - google-protobuf (>= 3.25, < 5.0) - sass-embedded (1.77.4-riscv64-linux-android) - google-protobuf (>= 3.25, < 5.0) - sass-embedded (1.77.4-riscv64-linux-gnu) - google-protobuf (>= 3.25, < 5.0) - sass-embedded (1.77.4-riscv64-linux-musl) - google-protobuf (>= 3.25, < 5.0) - sass-embedded (1.77.4-x86-cygwin) - google-protobuf (>= 3.25, < 5.0) - sass-embedded (1.77.4-x86-linux-android) - google-protobuf (>= 3.25, < 5.0) - sass-embedded (1.77.4-x86-linux-gnu) - google-protobuf (>= 3.25, < 5.0) - sass-embedded (1.77.4-x86-linux-musl) - google-protobuf (>= 3.25, < 5.0) - sass-embedded (1.77.4-x86-mingw-ucrt) - google-protobuf (>= 3.25, < 5.0) - sass-embedded (1.77.4-x86_64-cygwin) - google-protobuf (>= 3.25, < 5.0) - sass-embedded (1.77.4-x86_64-darwin) - google-protobuf (>= 3.25, < 5.0) - sass-embedded (1.77.4-x86_64-linux-android) - google-protobuf (>= 3.25, < 5.0) - sass-embedded (1.77.4-x86_64-linux-gnu) - google-protobuf (>= 3.25, < 5.0) - sass-embedded (1.77.4-x86_64-linux-musl) - google-protobuf (>= 3.25, < 5.0) - strscan (3.1.0) + sass-embedded (1.83.4-aarch64-linux-android) + google-protobuf (~> 4.29) + sass-embedded (1.83.4-aarch64-linux-gnu) + google-protobuf (~> 4.29) + sass-embedded (1.83.4-aarch64-linux-musl) + google-protobuf (~> 4.29) + sass-embedded (1.83.4-aarch64-mingw-ucrt) + google-protobuf (~> 4.29) + sass-embedded (1.83.4-arm-linux-androideabi) + google-protobuf (~> 4.29) + sass-embedded (1.83.4-arm-linux-gnueabihf) + google-protobuf (~> 4.29) + sass-embedded (1.83.4-arm-linux-musleabihf) + google-protobuf (~> 4.29) + sass-embedded (1.83.4-arm64-darwin) + google-protobuf (~> 4.29) + sass-embedded (1.83.4-riscv64-linux-android) + google-protobuf (~> 4.29) + sass-embedded (1.83.4-riscv64-linux-gnu) + google-protobuf (~> 4.29) + sass-embedded (1.83.4-riscv64-linux-musl) + google-protobuf (~> 4.29) + sass-embedded (1.83.4-x86_64-cygwin) + google-protobuf (~> 4.29) + sass-embedded (1.83.4-x86_64-darwin) + google-protobuf (~> 4.29) + sass-embedded (1.83.4-x86_64-linux-android) + google-protobuf (~> 4.29) + sass-embedded (1.83.4-x86_64-linux-gnu) + google-protobuf (~> 4.29) + sass-embedded (1.83.4-x86_64-linux-musl) + google-protobuf (~> 4.29) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) - unicode-display_width (2.5.0) - webrick (1.8.1) + unicode-display_width (2.6.0) + webrick (1.9.1) PLATFORMS aarch64-linux @@ -141,19 +151,18 @@ PLATFORMS aarch64-linux-musl aarch64-mingw-ucrt arm-linux-androideabi + arm-linux-gnu arm-linux-gnueabihf + arm-linux-musl arm-linux-musleabihf arm64-darwin riscv64-linux-android riscv64-linux-gnu riscv64-linux-musl ruby - x86-cygwin x86-linux - x86-linux-android x86-linux-gnu x86-linux-musl - x86-mingw-ucrt x86_64-cygwin x86_64-darwin x86_64-linux-android @@ -161,10 +170,14 @@ PLATFORMS x86_64-linux-musl DEPENDENCIES + base64 + csv jekyll jekyll-compose jekyll-redirect-from jekyll-remote-theme + jekyll-theme-adobe-hyde! + logger BUNDLED WITH - 2.5.11 + 2.6.2 diff --git a/docs/_config.yml b/docs/_config.yml index 461af210..ba4a369a 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -16,9 +16,9 @@ url: "http://www.stlab.cc" # the base hostname & protocol for your site twitter_username: SeanParent github_username: stlab -## To build locally, toggle these two. -remote_theme: adobe/hyde-theme@v2.0.2 -# theme: jekyll-theme-adobe-hyde +## [local-theme] To build locally, toggle these two lines +# remote_theme: adobe/hyde-theme@v2.0.2 +theme: jekyll-theme-adobe-hyde exclude: - _source diff --git a/docs/_sass/_overrides-dark.scss b/docs/_sass/_overrides-dark.scss index 3afc21cf..81cba845 100755 --- a/docs/_sass/_overrides-dark.scss +++ b/docs/_sass/_overrides-dark.scss @@ -2,7 +2,11 @@ // definitions. See `main-dark.scss` in the theme for a complete list of variables you can override // with this file. +//@forward "overrides-dark" show $hyde-primary; // @debug "Old link-color: #{$link-color}"; + +@use "overrides" as *; + $hyde-primary: $stlab-purple; // $link-color: $stlab-purple; // @debug "New link-color: #{$link-color}"; diff --git a/docs/_sass/_overrides-light.scss b/docs/_sass/_overrides-light.scss index ddd122f8..7e6a4621 100755 --- a/docs/_sass/_overrides-light.scss +++ b/docs/_sass/_overrides-light.scss @@ -3,6 +3,12 @@ // with this file. // @debug "Old hyde-primary: #{$link-color}"; + + +//@forward "overrides-light" show $hyde-primary, $link-color; + +@use "overrides" as *; + $hyde-primary: $stlab-purple; $link-color: $stlab-purple; // @debug "New link-color: #{$link-color}"; diff --git a/docs/_sass/_overrides.scss b/docs/_sass/_overrides.scss index 0f99ccfc..2e21aa3d 100644 --- a/docs/_sass/_overrides.scss +++ b/docs/_sass/_overrides.scss @@ -6,4 +6,5 @@ // $base-font-family: "Georgia"; // @debug "New base-font-family: #{$base-font-family}"; -$stlab-purple: #652f8e + +$stlab-purple: #652f8e; diff --git a/docs/tools/docker-tools/Dockerfile b/docs/tools/docker-tools/Dockerfile index 0fd1a202..f70bb975 100644 --- a/docs/tools/docker-tools/Dockerfile +++ b/docs/tools/docker-tools/Dockerfile @@ -1,5 +1,5 @@ # Build from the latest ubuntu release -FROM ubuntu:latest AS base +FROM ubuntu:latest # Install items requiring root access @@ -26,15 +26,18 @@ RUN export N_USE_XZ=0; n latest RUN npm install -g npm@latest RUN npm install -g browser-sync +###### Temporary ##### +RUN npm install -g sass-migrator + # Create a user "app" so everything is not running at root RUN useradd -ms /bin/bash app USER app WORKDIR /home/app # Set UTF language (assumed by jekyll) -ENV LC_ALL "C.UTF-8" -ENV LANG "en_US.UTF-8" -ENV LANGUAGE "en_US.UTF-8" +ENV LC_ALL="C.UTF-8" +ENV LANG="en_US.UTF-8" +ENV LANGUAGE="en_US.UTF-8" # Install ruby environment RUN echo 'eval "$(rbenv init -)"' >> ~/.bashrc @@ -55,23 +58,21 @@ RUN if [ -z ${RUBY_VERSION+x} ]; then \ RUN (eval "$(rbenv init -)"; gem install bundler) # build the final files -FROM base AS full +# FROM base AS full USER app WORKDIR /home/app -RUN mkdir ./install -WORKDIR ./install -COPY ./docs/Gemfile . -COPY ./docs/Gemfile.lock . -COPY ./docs/.ruby-version . +# RUN mkdir ./install +# WORKDIR ./install +# COPY ./docs/Gemfile . +# COPY ./docs/Gemfile.lock . +# COPY ./docs/.ruby-version . -RUN (eval "$(rbenv init -)"; \ - rbenv install `cat .ruby-version`; \ - gem install bundler; \ - rbenv rehash; \ - bundle install --frozen) +# RUN (eval "$(rbenv init -)"; \ +# bundle config set frozen true; \ +# bundle install) -WORKDIR /home/app +# WORKDIR /home/app EXPOSE 3000 3001 diff --git a/docs/tools/docker-tools/README.md b/docs/tools/docker-tools/README.md index 234fb413..cc15fedd 100644 --- a/docs/tools/docker-tools/README.md +++ b/docs/tools/docker-tools/README.md @@ -14,29 +14,42 @@ Specify the ruby version to match the latest stable - https://www.ruby-lang.org/ macOS and Linux: ```bash -VERSION="1.0.3" +VERSION="1.0.4" VOLUME="stlab.libraries" -RUBY_VERSION="3.2.2" +RUBY_VERSION="3.4.1" ``` Windows: ```powershell -$VERSION="1.0.3" +$VERSION="1.0.4" $VOLUME="stlab.libraries" -$RUBY_VERSION="3.2.2" +$RUBY_VERSION="3.4.1" $PSDefaultParameterValues = @{'Out-File:Encoding' = 'Ascii'} ``` -``` +Update the Docker and ruby version in the following files: + +```bash echo $VERSION > ./docs/tools/docker-tools/VERSION echo $RUBY_VERSION > ./docs/.ruby-version +``` + +Build the base image, no-cache is used so the latest tools are installed -# build the base image, no-cache is used so the latest tools are installed -docker build --build-arg RUBY_VERSION=$RUBY_VERSION --file ./docs/tools/docker-tools/Dockerfile --target base --tag $VOLUME . --no-cache +```bash + +docker build --build-arg RUBY_VERSION=$RUBY_VERSION --file ./docs/tools/docker-tools/Dockerfile --tag $VOLUME . --no-cache + + +#docker build --build-arg RUBY_VERSION=$RUBY_VERSION --file ./docs/tools/docker-tools/Dockerfile --target base --tag $VOLUME . --no-cache +``` -# update the docs environment (see below for using local theme) +Update the docs environment (see below for using local theme) + + -## Running the Docker image +## Running the Docker image with remote theme To run the docker image, execute the following. @@ -60,6 +77,24 @@ To run the docker image, execute the following. docker run --mount type=bind,source="$(pwd)",target=/mnt/host --tty --interactive --publish 3000-3001:3000-3001 $VOLUME bash ``` +### Running the Docker image with local theme + +Edit Gemfile and _config.yml to use a local copy of the theme. See `[local-them]` in the files for details. + +```bash +code ./docs/Gemfile +code ./docs/_config.yml +``` + +``` +docker run --mount type=bind,source="$(pwd)",target=/mnt/host \ + --mount type=bind,source=`readlink -f ../../adobe/hyde-theme`,target=/mnt/themes \ + --tty --interactive --publish 3000-3001:3000-3001 \ + $VOLUME bash +``` + +## Preparing the docs + This should leave you at a bash prompt that looks like this: ``` @@ -68,6 +103,12 @@ app@fc7590a63ba3:~$ The hex number is the docker image container ID and may be different. Going foreward I refer to this as the _docker_ prompt to distinguish it from the _local_ prompt. +``` +cd /mnt/host +git config --global --add safe.directory /mnt/host +./docs/tools/docs/update.sh +``` + ## Build the documentation site To build or rebuild the complete documentation site locally, execute the following from the docker prompt: @@ -97,14 +138,18 @@ docker ps docker exec -it bash ``` -To test a local copy of the Jekyll theme +## To use a local copy of the Jekyll theme -Edit Gemfile -Edit _config.yml +Edit Gemfile and _config.yml to use a local copy of the theme. See `[local-them]` in the files for details. + +```bash +code ./docs/Gemfile +code ./docs/_config.yml +``` ``` docker run --mount type=bind,source="$(pwd)",target=/mnt/host \ - --mount type=bind,source=$HOME/Projects/github.com/adobe/hyde-theme,target=/mnt/themes \ + --mount type=bind,source=`readlink -f ../../adobe/hyde-theme`,target=/mnt/themes \ --tty --interactive --publish 3000-3001:3000-3001 \ $VOLUME bash ``` @@ -115,3 +160,13 @@ docker run --mount type=bind,source="$(pwd)",target=/mnt/host \ - 1.0.1 - Updating tool set - 1.0.2 - Updating in for Hyde 2.0 - 1.0.3 - Updating Jekyll to 4.2.0 for new Hyde and moving to GitHub Actions. +- 1.0.4 - Updating docs for new header directory structure. + + + + $(rbenv init -)" + rbenv install `cat .ruby-version` + gem install bundler + rbenv rehash + bundle config set frozen true + bundle install diff --git a/docs/tools/docker-tools/VERSION b/docs/tools/docker-tools/VERSION index 21e8796a..ee90284c 100644 --- a/docs/tools/docker-tools/VERSION +++ b/docs/tools/docker-tools/VERSION @@ -1 +1 @@ -1.0.3 +1.0.4 diff --git a/docs/tools/docs/update.sh b/docs/tools/docs/update.sh index a102d6e7..f56d638b 100755 --- a/docs/tools/docs/update.sh +++ b/docs/tools/docs/update.sh @@ -22,11 +22,7 @@ set -- "${POSITIONAL[@]}" # restore positional parameters cd ./docs rm ./Gemfile.lock - -if [[ $LOCK = YES ]]; then - bundle lock --update -else - bundle update -fi +bundle lock --update +bundle install # git submodule update --recursive --remote From 29a9438f82ac05d5efc68ef777b7e3acab9fdd44 Mon Sep 17 00:00:00 2001 From: Sean Parent Date: Fri, 17 Jan 2025 13:09:51 -0800 Subject: [PATCH 05/14] Multiple commits to update hyde docs. --- .hyde-config | 2 +- docs/README.md | 13 ++++++- docs/_config.yml | 2 +- docs/_data/contributors.json | 72 +++++++++++++++++++++++++----------- docs/_data/releases.json | 29 +++++++++++++++ docs/generate_docs.sh | 6 +-- 6 files changed, 95 insertions(+), 29 deletions(-) diff --git a/.hyde-config b/.hyde-config index 2a2b4598..b84e67dc 100644 --- a/.hyde-config +++ b/.hyde-config @@ -1,5 +1,5 @@ { - "hyde-src-root": "stlab", + "hyde-src-root": "stlab/include", "hyde-yaml-dir": "docs/libraries", "clang_flags": [ "-std=c++20", diff --git a/docs/README.md b/docs/README.md index 5ac7b5bf..a8b31356 100644 --- a/docs/README.md +++ b/docs/README.md @@ -55,12 +55,21 @@ Configure the build as follows: cmake --preset=hyde-build-docs ``` -- Build the docker image per the instructions in the hyde repo, [current using the clang13 branch](https://github.com/adobe/hyde/tree/fosterbrereton/llvm13-updates). +Login to [GitHub Packages registry](https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry#authenticating-with-a-personal-access-token-classic) +```bash +echo $CR_PAT | docker login ghcr.io --password-stdin -u USERNAME ``` + +Fetch the latest image and run it: + +```bash +HYDE_VERSION=2.0.1 +docker pull ghcr.io/adobe/hyde:$HYDE_VERSION + docker run --platform linux/x86_64 --mount type=bind,source="$(pwd)/..",target=/mnt/host \ --tty --interactive \ - hyde bash + ghcr.io/adobe/hyde:$HYDE_VERSION bash ``` From the docker prompt diff --git a/docs/_config.yml b/docs/_config.yml index ba4a369a..29b92e34 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -36,7 +36,7 @@ exclude: - Gemfile.lock adobe_hyde: header_image: stlab-logo-long.svg - hyde_yaml_dir: /includes + hyde_yaml_dir: /include source_root: https://github.com/stlab/libraries/blob/main excerpt_separator: markdown: kramdown diff --git a/docs/_data/contributors.json b/docs/_data/contributors.json index 0c3bf53b..cfee2ac8 100644 --- a/docs/_data/contributors.json +++ b/docs/_data/contributors.json @@ -17,6 +17,7 @@ "events_url": "https://api.github.com/users/FelixPetriconi/events{/privacy}", "received_events_url": "https://api.github.com/users/FelixPetriconi/received_events", "type": "User", + "user_view_type": "public", "site_admin": false, "contributions": 794 }, @@ -38,8 +39,9 @@ "events_url": "https://api.github.com/users/sean-parent/events{/privacy}", "received_events_url": "https://api.github.com/users/sean-parent/received_events", "type": "User", + "user_view_type": "public", "site_admin": false, - "contributions": 143 + "contributions": 150 }, { "login": "fosterbrereton", @@ -59,6 +61,7 @@ "events_url": "https://api.github.com/users/fosterbrereton/events{/privacy}", "received_events_url": "https://api.github.com/users/fosterbrereton/received_events", "type": "User", + "user_view_type": "public", "site_admin": false, "contributions": 135 }, @@ -80,6 +83,7 @@ "events_url": "https://api.github.com/users/fpelliccioni/events{/privacy}", "received_events_url": "https://api.github.com/users/fpelliccioni/received_events", "type": "User", + "user_view_type": "public", "site_admin": false, "contributions": 101 }, @@ -101,6 +105,7 @@ "events_url": "https://api.github.com/users/camio/events{/privacy}", "received_events_url": "https://api.github.com/users/camio/received_events", "type": "User", + "user_view_type": "public", "site_admin": false, "contributions": 38 }, @@ -122,6 +127,7 @@ "events_url": "https://api.github.com/users/apmccartney/events{/privacy}", "received_events_url": "https://api.github.com/users/apmccartney/received_events", "type": "User", + "user_view_type": "public", "site_admin": false, "contributions": 28 }, @@ -143,6 +149,7 @@ "events_url": "https://api.github.com/users/nickpdemarco/events{/privacy}", "received_events_url": "https://api.github.com/users/nickpdemarco/received_events", "type": "User", + "user_view_type": "public", "site_admin": false, "contributions": 15 }, @@ -164,6 +171,7 @@ "events_url": "https://api.github.com/users/jaredadobe/events{/privacy}", "received_events_url": "https://api.github.com/users/jaredadobe/received_events", "type": "User", + "user_view_type": "public", "site_admin": false, "contributions": 8 }, @@ -185,6 +193,7 @@ "events_url": "https://api.github.com/users/neil-ca-moore/events{/privacy}", "received_events_url": "https://api.github.com/users/neil-ca-moore/received_events", "type": "User", + "user_view_type": "public", "site_admin": false, "contributions": 8 }, @@ -206,9 +215,32 @@ "events_url": "https://api.github.com/users/aaronalbers/events{/privacy}", "received_events_url": "https://api.github.com/users/aaronalbers/received_events", "type": "User", + "user_view_type": "public", "site_admin": false, "contributions": 7 }, + { + "login": "dabrahams", + "id": 44065, + "node_id": "MDQ6VXNlcjQ0MDY1", + "avatar_url": "https://avatars.githubusercontent.com/u/44065?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/dabrahams", + "html_url": "https://github.com/dabrahams", + "followers_url": "https://api.github.com/users/dabrahams/followers", + "following_url": "https://api.github.com/users/dabrahams/following{/other_user}", + "gists_url": "https://api.github.com/users/dabrahams/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dabrahams/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dabrahams/subscriptions", + "organizations_url": "https://api.github.com/users/dabrahams/orgs", + "repos_url": "https://api.github.com/users/dabrahams/repos", + "events_url": "https://api.github.com/users/dabrahams/events{/privacy}", + "received_events_url": "https://api.github.com/users/dabrahams/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false, + "contributions": 4 + }, { "login": "rwols", "id": 2431823, @@ -227,6 +259,7 @@ "events_url": "https://api.github.com/users/rwols/events{/privacy}", "received_events_url": "https://api.github.com/users/rwols/received_events", "type": "User", + "user_view_type": "public", "site_admin": false, "contributions": 4 }, @@ -248,6 +281,7 @@ "events_url": "https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/dependabot%5Bbot%5D/received_events", "type": "Bot", + "user_view_type": "public", "site_admin": false, "contributions": 4 }, @@ -269,6 +303,7 @@ "events_url": "https://api.github.com/users/Frans-Willem/events{/privacy}", "received_events_url": "https://api.github.com/users/Frans-Willem/received_events", "type": "User", + "user_view_type": "public", "site_admin": false, "contributions": 3 }, @@ -290,27 +325,7 @@ "events_url": "https://api.github.com/users/dixlorenz/events{/privacy}", "received_events_url": "https://api.github.com/users/dixlorenz/received_events", "type": "User", - "site_admin": false, - "contributions": 3 - }, - { - "login": "dabrahams", - "id": 44065, - "node_id": "MDQ6VXNlcjQ0MDY1", - "avatar_url": "https://avatars.githubusercontent.com/u/44065?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/dabrahams", - "html_url": "https://github.com/dabrahams", - "followers_url": "https://api.github.com/users/dabrahams/followers", - "following_url": "https://api.github.com/users/dabrahams/following{/other_user}", - "gists_url": "https://api.github.com/users/dabrahams/gists{/gist_id}", - "starred_url": "https://api.github.com/users/dabrahams/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/dabrahams/subscriptions", - "organizations_url": "https://api.github.com/users/dabrahams/orgs", - "repos_url": "https://api.github.com/users/dabrahams/repos", - "events_url": "https://api.github.com/users/dabrahams/events{/privacy}", - "received_events_url": "https://api.github.com/users/dabrahams/received_events", - "type": "User", + "user_view_type": "public", "site_admin": false, "contributions": 3 }, @@ -332,6 +347,7 @@ "events_url": "https://api.github.com/users/olnrao/events{/privacy}", "received_events_url": "https://api.github.com/users/olnrao/received_events", "type": "User", + "user_view_type": "public", "site_admin": false, "contributions": 2 }, @@ -353,6 +369,7 @@ "events_url": "https://api.github.com/users/BenFrantzDale/events{/privacy}", "received_events_url": "https://api.github.com/users/BenFrantzDale/received_events", "type": "User", + "user_view_type": "public", "site_admin": false, "contributions": 1 }, @@ -374,6 +391,7 @@ "events_url": "https://api.github.com/users/laserallan/events{/privacy}", "received_events_url": "https://api.github.com/users/laserallan/received_events", "type": "User", + "user_view_type": "public", "site_admin": false, "contributions": 1 }, @@ -395,6 +413,7 @@ "events_url": "https://api.github.com/users/dhaibatc/events{/privacy}", "received_events_url": "https://api.github.com/users/dhaibatc/received_events", "type": "User", + "user_view_type": "public", "site_admin": false, "contributions": 1 }, @@ -416,6 +435,7 @@ "events_url": "https://api.github.com/users/KevinHopps/events{/privacy}", "received_events_url": "https://api.github.com/users/KevinHopps/received_events", "type": "User", + "user_view_type": "public", "site_admin": false, "contributions": 1 }, @@ -437,6 +457,7 @@ "events_url": "https://api.github.com/users/touraill-adobe/events{/privacy}", "received_events_url": "https://api.github.com/users/touraill-adobe/received_events", "type": "User", + "user_view_type": "public", "site_admin": false, "contributions": 1 }, @@ -458,6 +479,7 @@ "events_url": "https://api.github.com/users/Manu343726/events{/privacy}", "received_events_url": "https://api.github.com/users/Manu343726/received_events", "type": "User", + "user_view_type": "public", "site_admin": false, "contributions": 1 }, @@ -479,6 +501,7 @@ "events_url": "https://api.github.com/users/sdebionne/events{/privacy}", "received_events_url": "https://api.github.com/users/sdebionne/received_events", "type": "User", + "user_view_type": "public", "site_admin": false, "contributions": 1 }, @@ -500,6 +523,7 @@ "events_url": "https://api.github.com/users/fernandopFF/events{/privacy}", "received_events_url": "https://api.github.com/users/fernandopFF/received_events", "type": "User", + "user_view_type": "public", "site_admin": false, "contributions": 1 }, @@ -521,6 +545,7 @@ "events_url": "https://api.github.com/users/friendlyanon/events{/privacy}", "received_events_url": "https://api.github.com/users/friendlyanon/received_events", "type": "User", + "user_view_type": "public", "site_admin": false, "contributions": 1 }, @@ -542,6 +567,7 @@ "events_url": "https://api.github.com/users/kypp/events{/privacy}", "received_events_url": "https://api.github.com/users/kypp/received_events", "type": "User", + "user_view_type": "public", "site_admin": false, "contributions": 1 }, @@ -563,6 +589,7 @@ "events_url": "https://api.github.com/users/superfunc/events{/privacy}", "received_events_url": "https://api.github.com/users/superfunc/received_events", "type": "User", + "user_view_type": "public", "site_admin": false, "contributions": 1 }, @@ -584,6 +611,7 @@ "events_url": "https://api.github.com/users/thinlang/events{/privacy}", "received_events_url": "https://api.github.com/users/thinlang/received_events", "type": "User", + "user_view_type": "public", "site_admin": false, "contributions": 1 } diff --git a/docs/_data/releases.json b/docs/_data/releases.json index c71f8883..47f65901 100644 --- a/docs/_data/releases.json +++ b/docs/_data/releases.json @@ -23,6 +23,7 @@ "events_url": "https://api.github.com/users/sean-parent/events{/privacy}", "received_events_url": "https://api.github.com/users/sean-parent/received_events", "type": "User", + "user_view_type": "public", "site_admin": false }, "node_id": "RE_kwDOAiB0YM4JD64o", @@ -65,6 +66,7 @@ "events_url": "https://api.github.com/users/sean-parent/events{/privacy}", "received_events_url": "https://api.github.com/users/sean-parent/received_events", "type": "User", + "user_view_type": "public", "site_admin": false }, "node_id": "RE_kwDOAiB0YM4IvnBT", @@ -107,6 +109,7 @@ "events_url": "https://api.github.com/users/sean-parent/events{/privacy}", "received_events_url": "https://api.github.com/users/sean-parent/received_events", "type": "User", + "user_view_type": "public", "site_admin": false }, "node_id": "RE_kwDOAiB0YM4IsvEh", @@ -148,6 +151,7 @@ "events_url": "https://api.github.com/users/sean-parent/events{/privacy}", "received_events_url": "https://api.github.com/users/sean-parent/received_events", "type": "User", + "user_view_type": "public", "site_admin": false }, "node_id": "RE_kwDOAiB0YM4IoCT_", @@ -189,6 +193,7 @@ "events_url": "https://api.github.com/users/sean-parent/events{/privacy}", "received_events_url": "https://api.github.com/users/sean-parent/received_events", "type": "User", + "user_view_type": "public", "site_admin": false }, "node_id": "RE_kwDOAiB0YM4Iime6", @@ -230,6 +235,7 @@ "events_url": "https://api.github.com/users/sean-parent/events{/privacy}", "received_events_url": "https://api.github.com/users/sean-parent/received_events", "type": "User", + "user_view_type": "public", "site_admin": false }, "node_id": "RE_kwDOAiB0YM4IXusD", @@ -272,6 +278,7 @@ "events_url": "https://api.github.com/users/sean-parent/events{/privacy}", "received_events_url": "https://api.github.com/users/sean-parent/received_events", "type": "User", + "user_view_type": "public", "site_admin": false }, "node_id": "RE_kwDOAiB0YM4HjTpe", @@ -314,6 +321,7 @@ "events_url": "https://api.github.com/users/FelixPetriconi/events{/privacy}", "received_events_url": "https://api.github.com/users/FelixPetriconi/received_events", "type": "User", + "user_view_type": "public", "site_admin": false }, "node_id": "RE_kwDOAiB0YM4EpuxP", @@ -355,6 +363,7 @@ "events_url": "https://api.github.com/users/sean-parent/events{/privacy}", "received_events_url": "https://api.github.com/users/sean-parent/received_events", "type": "User", + "user_view_type": "public", "site_admin": false }, "node_id": "RE_kwDOAiB0YM4Ejf1k", @@ -408,6 +417,7 @@ "events_url": "https://api.github.com/users/FelixPetriconi/events{/privacy}", "received_events_url": "https://api.github.com/users/FelixPetriconi/received_events", "type": "User", + "user_view_type": "public", "site_admin": false }, "node_id": "MDc6UmVsZWFzZTQwNDM2NjY5", @@ -449,6 +459,7 @@ "events_url": "https://api.github.com/users/sean-parent/events{/privacy}", "received_events_url": "https://api.github.com/users/sean-parent/received_events", "type": "User", + "user_view_type": "public", "site_admin": false }, "node_id": "MDc6UmVsZWFzZTM5Njc3MDE2", @@ -490,6 +501,7 @@ "events_url": "https://api.github.com/users/FelixPetriconi/events{/privacy}", "received_events_url": "https://api.github.com/users/FelixPetriconi/received_events", "type": "User", + "user_view_type": "public", "site_admin": false }, "node_id": "MDc6UmVsZWFzZTM3ODI4Mzk5", @@ -531,6 +543,7 @@ "events_url": "https://api.github.com/users/FelixPetriconi/events{/privacy}", "received_events_url": "https://api.github.com/users/FelixPetriconi/received_events", "type": "User", + "user_view_type": "public", "site_admin": false }, "node_id": "MDc6UmVsZWFzZTM3MTk4MjEw", @@ -572,6 +585,7 @@ "events_url": "https://api.github.com/users/FelixPetriconi/events{/privacy}", "received_events_url": "https://api.github.com/users/FelixPetriconi/received_events", "type": "User", + "user_view_type": "public", "site_admin": false }, "node_id": "MDc6UmVsZWFzZTM3MTI1NDU3", @@ -613,6 +627,7 @@ "events_url": "https://api.github.com/users/FelixPetriconi/events{/privacy}", "received_events_url": "https://api.github.com/users/FelixPetriconi/received_events", "type": "User", + "user_view_type": "public", "site_admin": false }, "node_id": "MDc6UmVsZWFzZTMyMzExMDI4", @@ -654,6 +669,7 @@ "events_url": "https://api.github.com/users/FelixPetriconi/events{/privacy}", "received_events_url": "https://api.github.com/users/FelixPetriconi/received_events", "type": "User", + "user_view_type": "public", "site_admin": false }, "node_id": "MDc6UmVsZWFzZTMxNDIyOTQw", @@ -695,6 +711,7 @@ "events_url": "https://api.github.com/users/FelixPetriconi/events{/privacy}", "received_events_url": "https://api.github.com/users/FelixPetriconi/received_events", "type": "User", + "user_view_type": "public", "site_admin": false }, "node_id": "MDc6UmVsZWFzZTIzNDI2NTk2", @@ -736,6 +753,7 @@ "events_url": "https://api.github.com/users/FelixPetriconi/events{/privacy}", "received_events_url": "https://api.github.com/users/FelixPetriconi/received_events", "type": "User", + "user_view_type": "public", "site_admin": false }, "node_id": "MDc6UmVsZWFzZTIxMDY2Nzk1", @@ -777,6 +795,7 @@ "events_url": "https://api.github.com/users/FelixPetriconi/events{/privacy}", "received_events_url": "https://api.github.com/users/FelixPetriconi/received_events", "type": "User", + "user_view_type": "public", "site_admin": false }, "node_id": "MDc6UmVsZWFzZTE5MzYwMTY0", @@ -818,6 +837,7 @@ "events_url": "https://api.github.com/users/FelixPetriconi/events{/privacy}", "received_events_url": "https://api.github.com/users/FelixPetriconi/received_events", "type": "User", + "user_view_type": "public", "site_admin": false }, "node_id": "MDc6UmVsZWFzZTE1NDM1Nzgx", @@ -859,6 +879,7 @@ "events_url": "https://api.github.com/users/FelixPetriconi/events{/privacy}", "received_events_url": "https://api.github.com/users/FelixPetriconi/received_events", "type": "User", + "user_view_type": "public", "site_admin": false }, "node_id": "MDc6UmVsZWFzZTE0NDk1NzI5", @@ -900,6 +921,7 @@ "events_url": "https://api.github.com/users/FelixPetriconi/events{/privacy}", "received_events_url": "https://api.github.com/users/FelixPetriconi/received_events", "type": "User", + "user_view_type": "public", "site_admin": false }, "node_id": "MDc6UmVsZWFzZTEzNjYyODk4", @@ -941,6 +963,7 @@ "events_url": "https://api.github.com/users/FelixPetriconi/events{/privacy}", "received_events_url": "https://api.github.com/users/FelixPetriconi/received_events", "type": "User", + "user_view_type": "public", "site_admin": false }, "node_id": "MDc6UmVsZWFzZTEyMTUwMDY5", @@ -982,6 +1005,7 @@ "events_url": "https://api.github.com/users/FelixPetriconi/events{/privacy}", "received_events_url": "https://api.github.com/users/FelixPetriconi/received_events", "type": "User", + "user_view_type": "public", "site_admin": false }, "node_id": "MDc6UmVsZWFzZTEyMDM5MTEw", @@ -1023,6 +1047,7 @@ "events_url": "https://api.github.com/users/FelixPetriconi/events{/privacy}", "received_events_url": "https://api.github.com/users/FelixPetriconi/received_events", "type": "User", + "user_view_type": "public", "site_admin": false }, "node_id": "MDc6UmVsZWFzZTExOTM1Nzcy", @@ -1064,6 +1089,7 @@ "events_url": "https://api.github.com/users/FelixPetriconi/events{/privacy}", "received_events_url": "https://api.github.com/users/FelixPetriconi/received_events", "type": "User", + "user_view_type": "public", "site_admin": false }, "node_id": "MDc6UmVsZWFzZTExNTA3ODUx", @@ -1105,6 +1131,7 @@ "events_url": "https://api.github.com/users/FelixPetriconi/events{/privacy}", "received_events_url": "https://api.github.com/users/FelixPetriconi/received_events", "type": "User", + "user_view_type": "public", "site_admin": false }, "node_id": "MDc6UmVsZWFzZTg4OTUzMjE=", @@ -1146,6 +1173,7 @@ "events_url": "https://api.github.com/users/fosterbrereton/events{/privacy}", "received_events_url": "https://api.github.com/users/fosterbrereton/received_events", "type": "User", + "user_view_type": "public", "site_admin": false }, "node_id": "MDc6UmVsZWFzZTg2OTE2Mjg=", @@ -1187,6 +1215,7 @@ "events_url": "https://api.github.com/users/fosterbrereton/events{/privacy}", "received_events_url": "https://api.github.com/users/fosterbrereton/received_events", "type": "User", + "user_view_type": "public", "site_admin": false }, "node_id": "MDc6UmVsZWFzZTY2NzI1NTE=", diff --git a/docs/generate_docs.sh b/docs/generate_docs.sh index 041ea257..55cb0cfc 100755 --- a/docs/generate_docs.sh +++ b/docs/generate_docs.sh @@ -4,17 +4,17 @@ pushd $(dirname "$0") > /dev/null CUR_DIR=`pwd` SRC_ROOT="${CUR_DIR}/.." -HYDE_DST_ROOT="${CUR_DIR}/includes" +HYDE_DST_ROOT="${CUR_DIR}/include" # Whole-directory documentation (when the time is right) -SRC_FILE_SET=`find ${SRC_ROOT}/stlab -name \*.hpp` +SRC_FILE_SET=`find ${SRC_ROOT}/include/stlab -name \*.hpp` # SRC_FILE_SET="${SRC_ROOT}/stlab/*.hpp ${SRC_ROOT}/stlab/concurrency/*.hpp" # Per-file documentation, separated by spaces (during piecemeal migration) # SRC_FILE_SET="${SRC_ROOT}/stlab/copy_on_write.hpp ${SRC_ROOT}/stlab/forest.hpp" for CUR_FILE in ${SRC_FILE_SET}; do echo "Processing $CUR_FILE" - CUR_COMMAND="hyde --access-filter-protected --namespace-blacklist=detail --hyde-update \"${CUR_FILE}\" --hyde-yaml-dir=${HYDE_DST_ROOT} --hyde-src-root=${SRC_ROOT} -- -std=c++20 -I${SRC_ROOT}/../build/hyde/ -I${SRC_ROOT}/" + CUR_COMMAND="hyde --access-filter-protected --namespace-blacklist=detail --hyde-update \"${CUR_FILE}\" --hyde-yaml-dir=${HYDE_DST_ROOT} --hyde-src-root=${SRC_ROOT}/include/ -- -std=c++20 -I${SRC_ROOT}/build/hyde/include/ -I${SRC_ROOT}/include/" echo $CUR_COMMAND eval $CUR_COMMAND From 9c1be21f746f22b039e0c974a67793407868d892 Mon Sep 17 00:00:00 2001 From: Sean Parent Date: Fri, 17 Jan 2025 13:17:13 -0800 Subject: [PATCH 06/14] Rename of docs/includes -> docs/include --- docs/{includes => include}/index.md | 0 docs/{includes => include}/stlab/algorithm/index.md | 0 .../stlab/algorithm/reverse.hpp/f_reverse.md | 0 .../stlab/algorithm/reverse.hpp/f_reverse_append.md | 0 .../stlab/algorithm/reverse.hpp/f_reverse_copy.md | 0 .../stlab/algorithm/reverse.hpp/f_reverse_nodes.md | 0 .../stlab/algorithm/reverse.hpp/f_reverse_until.md | 0 docs/{includes => include}/stlab/algorithm/reverse.hpp/index.md | 0 docs/{includes => include}/stlab/concurrency/await.hpp/f_await.md | 0 .../stlab/concurrency/await.hpp/f_await_for.md | 0 .../stlab/concurrency/await.hpp/f_blocking_get.md | 0 .../stlab/concurrency/await.hpp/f_blocking_get_for.md | 0 .../stlab/concurrency/await.hpp/f_invoke_waiting.md | 0 docs/{includes => include}/stlab/concurrency/await.hpp/index.md | 0 .../concurrency/channel.hpp/argument_of3CR2028Arg293E/index.md | 0 .../concurrency/channel.hpp/buffer_size/buffer_size_example.cpp | 0 .../stlab/concurrency/channel.hpp/buffer_size/index.md | 0 .../stlab/concurrency/channel.hpp/buffer_size/m_buffer_size.md | 0 .../stlab/concurrency/channel.hpp/channel_error/index.md | 0 .../concurrency/channel.hpp/channel_error/m_channel_error.md | 0 .../stlab/concurrency/channel.hpp/channel_error/m_code.md | 0 .../stlab/concurrency/channel.hpp/channel_error/m_operator3D.md | 0 .../stlab/concurrency/channel.hpp/channel_error/m_what.md | 0 .../concurrency/channel.hpp/channel_error/m_~channel_error.md | 0 .../stlab/concurrency/channel.hpp/channel_example.cpp | 0 .../stlab/concurrency/channel.hpp/f_channel.md | 0 .../stlab/concurrency/channel.hpp/f_for_each_n.md | 0 .../{includes => include}/stlab/concurrency/channel.hpp/f_join.md | 0 .../stlab/concurrency/channel.hpp/f_merge.md | 0 .../stlab/concurrency/channel.hpp/f_merge_channel.md | 0 .../stlab/concurrency/channel.hpp/f_operator26.md | 0 docs/{includes => include}/stlab/concurrency/channel.hpp/f_zip.md | 0 .../stlab/concurrency/channel.hpp/f_zip_with.md | 0 .../stlab/concurrency/channel.hpp/first_3CT12C20T3E/index.md | 0 .../channel.hpp/function_process3CR2028.9cd1ac2f/index.md | 0 .../channel.hpp/function_process3CR2028.9cd1ac2f/m_await.md | 0 .../m_function_process3CR2028Args293E.md | 0 .../channel.hpp/function_process3CR2028.9cd1ac2f/m_state.md | 0 .../channel.hpp/function_process3CR2028.9cd1ac2f/m_yield.md | 0 .../stlab/concurrency/channel.hpp/identity/index.md | 0 .../stlab/concurrency/channel.hpp/identity/m_identity.md | 0 .../stlab/concurrency/channel.hpp/identity/m_operator2829.md | 0 .../stlab/concurrency/channel.hpp/identity/m_~identity.md | 0 docs/{includes => include}/stlab/concurrency/channel.hpp/index.md | 0 .../stlab/concurrency/channel.hpp/merge_channel_example.cpp | 0 .../stlab/concurrency/channel.hpp/receiver3CT3E/f_operator213D.md | 0 .../stlab/concurrency/channel.hpp/receiver3CT3E/f_operator3D3D.md | 0 .../stlab/concurrency/channel.hpp/receiver3CT3E/f_swap.md | 0 .../stlab/concurrency/channel.hpp/receiver3CT3E/index.md | 0 .../stlab/concurrency/channel.hpp/receiver3CT3E/m_operator3D.md | 0 .../stlab/concurrency/channel.hpp/receiver3CT3E/m_operator7C.md | 0 .../stlab/concurrency/channel.hpp/receiver3CT3E/m_ready.md | 0 .../concurrency/channel.hpp/receiver3CT3E/m_receiver3CT3E.md | 0 .../stlab/concurrency/channel.hpp/receiver3CT3E/m_set_ready.md | 0 .../stlab/concurrency/channel.hpp/receiver3CT3E/m_swap.md | 0 .../concurrency/channel.hpp/receiver3CT3E/m_~receiver3CT3E.md | 0 .../channel.hpp/receiver3CT3E/operator_pipe_example.cpp | 0 .../concurrency/channel.hpp/receiver3CT3E/set_ready_example.cpp | 0 .../concurrency/channel.hpp/result_of_3CR2028Args293E/index.md | 0 .../stlab/concurrency/channel.hpp/round_robin_t/index.md | 0 .../sender3CT2C20enable_if_.8709540a/call_operator_example.cpp | 0 .../sender3CT2C20enable_if_.8709540a/close_example.cpp | 0 .../channel.hpp/sender3CT2C20enable_if_.8709540a/index.md | 0 .../channel.hpp/sender3CT2C20enable_if_.8709540a/m_close.md | 0 .../channel.hpp/sender3CT2C20enable_if_.8709540a/m_free_buffer.md | 0 .../sender3CT2C20enable_if_.8709540a/m_operator2829.md | 0 .../channel.hpp/sender3CT2C20enable_if_.8709540a/m_operator3D.md | 0 ...f3C21smart_is_copy_constructible_v3CT3E2C20void3E3A3Atype3E.md | 0 .../channel.hpp/sender3CT2C20enable_if_.8709540a/m_swap.md | 0 ...f3C21smart_is_copy_constructible_v3CT3E2C20void3E3A3Atype3E.md | 0 .../sender3CT2C20enable_if_.a01d6424/call_operator_example.cpp | 0 .../sender3CT2C20enable_if_.a01d6424/close_example.cpp | 0 .../channel.hpp/sender3CT2C20enable_if_.a01d6424/index.md | 0 .../channel.hpp/sender3CT2C20enable_if_.a01d6424/m_close.md | 0 .../channel.hpp/sender3CT2C20enable_if_.a01d6424/m_free_buffer.md | 0 .../sender3CT2C20enable_if_.a01d6424/m_operator2829.md | 0 .../channel.hpp/sender3CT2C20enable_if_.a01d6424/m_operator3D.md | 0 ..._if3Csmart_is_copy_constructible_v3CT3E2C20void3E3A3Atype3E.md | 0 .../channel.hpp/sender3CT2C20enable_if_.a01d6424/m_swap.md | 0 ..._if3Csmart_is_copy_constructible_v3CT3E2C20void3E3A3Atype3E.md | 0 .../concurrency/channel.hpp/stlab3A3Av33A3Achannel_error_codes.md | 0 .../stlab/concurrency/channel.hpp/stlab3A3Av33A3Amessage_t.md | 0 .../stlab/concurrency/channel.hpp/stlab3A3Av33A3Aprocess_state.md | 0 .../stlab/concurrency/channel.hpp/unordered_t/index.md | 0 .../stlab/concurrency/channel.hpp/zip_example.cpp | 0 .../stlab/concurrency/channel.hpp/zip_with_example.cpp | 0 .../stlab/concurrency/channel.hpp/zip_with_t/index.md | 0 .../stlab/concurrency/concurrency.hpp/index.md | 0 .../stlab/concurrency/default_executor.hpp/index.md | 0 .../stlab/concurrency/executor_base.hpp/executor/index.md | 0 .../stlab/concurrency/executor_base.hpp/executor/m_executor.md | 0 .../stlab/concurrency/executor_base.hpp/executor/m_operator3D.md | 0 .../executor_base.hpp/executor_task_pair3CF3E/index.md | 0 .../stlab/concurrency/executor_base.hpp/f_execute_at.md | 0 .../stlab/concurrency/executor_base.hpp/f_execute_delayed.md | 0 .../stlab/concurrency/executor_base.hpp/f_operator26.md | 0 .../stlab/concurrency/executor_base.hpp/index.md | 0 .../stlab/concurrency/future.hpp/async_example.cpp | 0 .../{includes => include}/stlab/concurrency/future.hpp/f_async.md | 0 .../concurrency/future.hpp/f_invoke_remove_monostate_arguments.md | 0 .../concurrency/future.hpp/f_invoke_void_to_monostate_result.md | 0 .../stlab/concurrency/future.hpp/f_monostate_to_empty_tuple.md | 0 .../stlab/concurrency/future.hpp/f_monostate_to_void.md | 0 .../stlab/concurrency/future.hpp/f_optional_monostate_to_bool.md | 0 .../stlab/concurrency/future.hpp/f_when_all.md | 0 .../stlab/concurrency/future.hpp/f_when_any.md | 0 .../stlab/concurrency/future.hpp/future/f_operator213D.md | 0 .../stlab/concurrency/future.hpp/future/f_operator3D3D.md | 0 .../stlab/concurrency/future.hpp/future/f_swap.md | 0 .../future.hpp/future3CT2C20enable_if_.53f3cff2/index.md | 0 .../future.hpp/future3CT2C20enable_if_.53f3cff2/m_detach.md | 0 .../future.hpp/future3CT2C20enable_if_.53f3cff2/m_error.md | 0 .../future.hpp/future3CT2C20enable_if_.53f3cff2/m_exception.md | 0 ...ename20void_to_monostate3CT3E3A3Atype3E2C20void3E3A3Atype3E.md | 0 .../future.hpp/future3CT2C20enable_if_.53f3cff2/m_get_ready.md | 0 .../future.hpp/future3CT2C20enable_if_.53f3cff2/m_get_try.md | 0 .../future.hpp/future3CT2C20enable_if_.53f3cff2/m_is_ready.md | 0 .../future.hpp/future3CT2C20enable_if_.53f3cff2/m_operator5E.md | 0 .../future.hpp/future3CT2C20enable_if_.53f3cff2/m_operator7C.md | 0 .../future.hpp/future3CT2C20enable_if_.53f3cff2/m_recover.md | 0 .../future.hpp/future3CT2C20enable_if_.53f3cff2/m_reset.md | 0 .../future.hpp/future3CT2C20enable_if_.53f3cff2/m_swap.md | 0 .../future.hpp/future3CT2C20enable_if_.53f3cff2/m_then.md | 0 .../future.hpp/future3CT2C20enable_if_.53f3cff2/m_valid.md | 0 .../future.hpp/future3CT2C20enable_if_.a37aab7c/index.md | 0 .../future.hpp/future3CT2C20enable_if_.a37aab7c/m_detach.md | 0 .../future.hpp/future3CT2C20enable_if_.a37aab7c/m_error.md | 0 .../future.hpp/future3CT2C20enable_if_.a37aab7c/m_exception.md | 0 ...ename20void_to_monostate3CT3E3A3Atype3E2C20void3E3A3Atype3E.md | 0 .../future.hpp/future3CT2C20enable_if_.a37aab7c/m_get_ready.md | 0 .../future.hpp/future3CT2C20enable_if_.a37aab7c/m_get_try.md | 0 .../future.hpp/future3CT2C20enable_if_.a37aab7c/m_is_ready.md | 0 .../future.hpp/future3CT2C20enable_if_.a37aab7c/m_operator3D.md | 0 .../future.hpp/future3CT2C20enable_if_.a37aab7c/m_operator5E.md | 0 .../future.hpp/future3CT2C20enable_if_.a37aab7c/m_operator7C.md | 0 .../future.hpp/future3CT2C20enable_if_.a37aab7c/m_recover.md | 0 .../future.hpp/future3CT2C20enable_if_.a37aab7c/m_reset.md | 0 .../future.hpp/future3CT2C20enable_if_.a37aab7c/m_swap.md | 0 .../future.hpp/future3CT2C20enable_if_.a37aab7c/m_then.md | 0 .../future.hpp/future3CT2C20enable_if_.a37aab7c/m_valid.md | 0 .../stlab/concurrency/future.hpp/future_error/index.md | 0 .../stlab/concurrency/future.hpp/future_error/m_code.md | 0 .../stlab/concurrency/future.hpp/future_error/m_future_error.md | 0 .../stlab/concurrency/future.hpp/future_error/m_operator3D.md | 0 .../stlab/concurrency/future.hpp/future_error/m_what.md | 0 .../stlab/concurrency/future.hpp/future_error/m_~future_error.md | 0 docs/{includes => include}/stlab/concurrency/future.hpp/index.md | 0 .../stlab/concurrency/future.hpp/make_when_any3CT3E/index.md | 0 .../stlab/concurrency/future.hpp/make_when_any3CT3E/m_make.md | 0 .../stlab/concurrency/future.hpp/make_when_any3Cvoid3E/index.md | 0 .../stlab/concurrency/future.hpp/make_when_any3Cvoid3E/m_make.md | 0 .../future.hpp/packaged_task/f_future_with_broken_promise.md | 0 .../stlab/concurrency/future.hpp/packaged_task/f_package.md | 0 .../concurrency/future.hpp/packaged_task/package_example.cpp | 0 .../stlab/concurrency/future.hpp/packaged_task3CArgs3E/index.md | 0 .../concurrency/future.hpp/packaged_task3CArgs3E/m_canceled.md | 0 .../future.hpp/packaged_task3CArgs3E/m_operator2829.md | 0 .../concurrency/future.hpp/packaged_task3CArgs3E/m_operator3D.md | 0 .../future.hpp/packaged_task3CArgs3E/m_packaged_task3CArgs3E.md | 0 .../future.hpp/packaged_task3CArgs3E/m_set_exception.md | 0 .../future.hpp/packaged_task3CArgs3E/m_~packaged_task3CArgs3E.md | 0 .../concurrency/future.hpp/stlab3A3Av33A3Afuture_error_codes.md | 0 .../stlab/concurrency/future.hpp/void_to_monostate3CT3E/index.md | 0 .../stlab/concurrency/future.hpp/when_all_example.cpp | 0 .../stlab/concurrency/future.hpp/when_all_void_example.cpp | 0 .../stlab/concurrency/future.hpp/when_any_example.cpp | 0 .../stlab/concurrency/future.hpp/when_any_void_example.cpp | 0 .../stlab/concurrency/immediate_executor.hpp/index.md | 0 docs/{includes => include}/stlab/concurrency/index.md | 0 .../stlab/concurrency/main_executor.hpp/index.md | 0 .../{includes => include}/stlab/concurrency/progress.hpp/index.md | 0 .../stlab/concurrency/progress.hpp/progress_tracker/index.md | 0 .../concurrency/progress.hpp/progress_tracker/m_completed.md | 0 .../concurrency/progress.hpp/progress_tracker/m_operator2829.md | 0 .../concurrency/progress.hpp/progress_tracker/m_operator3D.md | 0 .../progress.hpp/progress_tracker/m_progress_tracker.md | 0 .../stlab/concurrency/progress.hpp/progress_tracker/m_steps.md | 0 .../concurrency/ready_future.hpp/f_make_exceptional_future.md | 0 .../stlab/concurrency/ready_future.hpp/f_make_ready_future.md | 0 .../stlab/concurrency/ready_future.hpp/index.md | 0 .../stlab/concurrency/serial_queue.hpp/index.md | 0 .../stlab/concurrency/serial_queue.hpp/serial_queue_t/index.md | 0 .../concurrency/serial_queue.hpp/serial_queue_t/m_executor.md | 0 .../concurrency/serial_queue.hpp/serial_queue_t/m_operator2829.md | 0 .../concurrency/serial_queue.hpp/serial_queue_t/m_operator3D.md | 0 .../serial_queue.hpp/serial_queue_t/m_serial_queue_t.md | 0 .../serial_queue.hpp/serial_queue_t/serial_queue_example.cpp | 0 .../concurrency/serial_queue.hpp/stlab3A3Av33A3Aschedule_mode.md | 0 .../set_current_thread_name.hpp/f_set_current_thread_name.md | 0 .../stlab/concurrency/set_current_thread_name.hpp/index.md | 0 .../stlab/concurrency/system_timer.hpp/index.md | 0 docs/{includes => include}/stlab/concurrency/task.hpp/index.md | 0 .../task.hpp/noexcept_deducer3CT2C20.26423853/index.md | 0 .../task.hpp/noexcept_deducer3CT2C20.5812342b/index.md | 0 .../task.hpp/task_3CNoExcept2C20R2C20Args3E/f_operator213D.md | 0 .../task.hpp/task_3CNoExcept2C20R2C20Args3E/f_operator3D3D.md | 0 .../concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/f_swap.md | 0 .../concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/index.md | 0 .../task.hpp/task_3CNoExcept2C20R2C20Args3E/m_operator20bool.md | 0 .../task.hpp/task_3CNoExcept2C20R2C20Args3E/m_operator2829.md | 0 .../task.hpp/task_3CNoExcept2C20R2C20Args3E/m_operator3D.md | 0 .../concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_swap.md | 0 .../task.hpp/task_3CNoExcept2C20R2C20Args3E/m_target.md | 0 .../task.hpp/task_3CNoExcept2C20R2C20Args3E/m_target_type.md | 0 .../m_task_3CNoExcept2C20R2C20Args3E.md | 0 .../m_~task_3CNoExcept2C20R2C20Args3E.md | 0 .../task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/index.md | 0 .../model3CF2C20false3E/m_const_pointer.md | 0 .../task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/m_dtor.md | 0 .../model3CF2C20false3E/m_invoke.md | 0 .../model3CF2C20false3E/m_model3CF2C20false3E.md | 0 .../model3CF2C20false3E/m_move_ctor.md | 0 .../model3CF2C20false3E/m_pointer.md | 0 .../model3CF2C20false3E/m_target_type.md | 0 .../task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/index.md | 0 .../model3CF2C20true3E/m_const_pointer.md | 0 .../task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_dtor.md | 0 .../task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_invoke.md | 0 .../model3CF2C20true3E/m_model3CF2C20true3E.md | 0 .../model3CF2C20true3E/m_move_ctor.md | 0 .../model3CF2C20true3E/m_pointer.md | 0 .../model3CF2C20true3E/m_target_type.md | 0 .../traits.hpp/detector3CDefault2C202C.c8fba2e1/index.md | 0 .../traits.hpp/detector3CDefault2C20vo.a25dd5ae/index.md | 0 docs/{includes => include}/stlab/concurrency/traits.hpp/index.md | 0 .../stlab/concurrency/traits.hpp/nonesuch/index.md | 0 .../stlab/concurrency/traits.hpp/nonesuch/m_nonesuch.md | 0 .../stlab/concurrency/traits.hpp/nonesuch/m_operator3D.md | 0 .../stlab/concurrency/traits.hpp/nonesuch/m_~nonesuch.md | 0 .../stlab/concurrency/traits.hpp/smart_test3Ctest2C20T3E/index.md | 0 .../tuple_algorithm.hpp/f_apply_ignore_placeholders.md | 0 .../stlab/concurrency/tuple_algorithm.hpp/f_apply_indexed.md | 0 .../stlab/concurrency/tuple_algorithm.hpp/f_get_i.md | 0 .../stlab/concurrency/tuple_algorithm.hpp/f_tuple_find.md | 0 .../stlab/concurrency/tuple_algorithm.hpp/f_tuple_for_each.md | 0 .../stlab/concurrency/tuple_algorithm.hpp/f_void_i.md | 0 .../stlab/concurrency/tuple_algorithm.hpp/index.md | 0 .../stlab/concurrency/tuple_algorithm.hpp/placeholder/index.md | 0 .../remove_placeholder3CTuple3E/function3CIndex3E/index.md | 0 .../tuple_algorithm.hpp/remove_placeholder3CTuple3E/index.md | 0 docs/{includes => include}/stlab/concurrency/utility.hpp/index.md | 0 .../stlab/copy_on_write.hpp/copy_on_write3CT3E/f_operator213D.md | 0 .../stlab/copy_on_write.hpp/copy_on_write3CT3E/f_operator3C.md | 0 .../stlab/copy_on_write.hpp/copy_on_write3CT3E/f_operator3C3D.md | 0 .../stlab/copy_on_write.hpp/copy_on_write3CT3E/f_operator3D3D.md | 0 .../stlab/copy_on_write.hpp/copy_on_write3CT3E/f_operator3E.md | 0 .../stlab/copy_on_write.hpp/copy_on_write3CT3E/f_operator3E3D.md | 0 .../stlab/copy_on_write.hpp/copy_on_write3CT3E/f_swap.md | 0 .../stlab/copy_on_write.hpp/copy_on_write3CT3E/index.md | 0 .../copy_on_write.hpp/copy_on_write3CT3E/m_copy_on_write3CT3E.md | 0 .../stlab/copy_on_write.hpp/copy_on_write3CT3E/m_identity.md | 0 .../stlab/copy_on_write.hpp/copy_on_write3CT3E/m_operator-3E.md | 0 .../copy_on_write3CT3E/m_operator20const20element_type2026.md | 0 .../stlab/copy_on_write.hpp/copy_on_write3CT3E/m_operator2A.md | 0 .../stlab/copy_on_write.hpp/copy_on_write3CT3E/m_operator3D.md | 0 .../stlab/copy_on_write.hpp/copy_on_write3CT3E/m_read.md | 0 .../stlab/copy_on_write.hpp/copy_on_write3CT3E/m_unique.md | 0 .../copy_on_write.hpp/copy_on_write3CT3E/m_unique_instance.md | 0 .../stlab/copy_on_write.hpp/copy_on_write3CT3E/m_write.md | 0 .../copy_on_write.hpp/copy_on_write3CT3E/m_~copy_on_write3CT3E.md | 0 docs/{includes => include}/stlab/copy_on_write.hpp/index.md | 0 docs/{includes => include}/stlab/enum_ops.hpp/f_operator--.md | 0 docs/{includes => include}/stlab/enum_ops.hpp/f_operator-.md | 0 docs/{includes => include}/stlab/enum_ops.hpp/f_operator-3D.md | 0 docs/{includes => include}/stlab/enum_ops.hpp/f_operator21.md | 0 docs/{includes => include}/stlab/enum_ops.hpp/f_operator213D.md | 0 docs/{includes => include}/stlab/enum_ops.hpp/f_operator25.md | 0 docs/{includes => include}/stlab/enum_ops.hpp/f_operator253D.md | 0 docs/{includes => include}/stlab/enum_ops.hpp/f_operator26.md | 0 docs/{includes => include}/stlab/enum_ops.hpp/f_operator263D.md | 0 docs/{includes => include}/stlab/enum_ops.hpp/f_operator2A.md | 0 docs/{includes => include}/stlab/enum_ops.hpp/f_operator2A3D.md | 0 docs/{includes => include}/stlab/enum_ops.hpp/f_operator2B.md | 0 docs/{includes => include}/stlab/enum_ops.hpp/f_operator2B2B.md | 0 docs/{includes => include}/stlab/enum_ops.hpp/f_operator2B3D.md | 0 docs/{includes => include}/stlab/enum_ops.hpp/f_operator2F.md | 0 docs/{includes => include}/stlab/enum_ops.hpp/f_operator2F3D.md | 0 docs/{includes => include}/stlab/enum_ops.hpp/f_operator3C3C.md | 0 docs/{includes => include}/stlab/enum_ops.hpp/f_operator3C3C3D.md | 0 docs/{includes => include}/stlab/enum_ops.hpp/f_operator3D3D.md | 0 docs/{includes => include}/stlab/enum_ops.hpp/f_operator3E3E.md | 0 docs/{includes => include}/stlab/enum_ops.hpp/f_operator3E3E3D.md | 0 docs/{includes => include}/stlab/enum_ops.hpp/f_operator5E.md | 0 docs/{includes => include}/stlab/enum_ops.hpp/f_operator5E3D.md | 0 docs/{includes => include}/stlab/enum_ops.hpp/f_operator7C.md | 0 docs/{includes => include}/stlab/enum_ops.hpp/f_operator7C3D.md | 0 docs/{includes => include}/stlab/enum_ops.hpp/f_operator~.md | 0 .../stlab/enum_ops.hpp/f_stlab_enable_arithmetic_enum.md | 0 .../stlab/enum_ops.hpp/f_stlab_enable_bitmask_enum.md | 0 docs/{includes => include}/stlab/enum_ops.hpp/index.md | 0 .../stlab/enum_ops.hpp/safe_underlying_type3CT.399d3431/index.md | 0 .../stlab/enum_ops.hpp/safe_underlying_type3CT.af98cac6/index.md | 0 .../stlab/forest.hpp/child_adaptor3CForest3E/index.md | 0 .../stlab/forest.hpp/child_adaptor3CForest3E/m_back.md | 0 .../child_adaptor3CForest3E/m_child_adaptor3CForest3E.md | 0 .../stlab/forest.hpp/child_adaptor3CForest3E/m_front.md | 0 .../stlab/forest.hpp/child_adaptor3CForest3E/m_pop_back.md | 0 .../stlab/forest.hpp/child_adaptor3CForest3E/m_pop_front.md | 0 .../stlab/forest.hpp/child_adaptor3CForest3E/m_push_back.md | 0 .../stlab/forest.hpp/child_adaptor3CForest3E/m_push_front.md | 0 .../stlab/forest.hpp/child_iterator3CI3E/f_operator213D.md | 0 .../stlab/forest.hpp/child_iterator3CI3E/f_operator3D3D.md | 0 .../stlab/forest.hpp/child_iterator3CI3E/index.md | 0 .../stlab/forest.hpp/child_iterator3CI3E/m_base.md | 0 .../stlab/forest.hpp/child_iterator3CI3E/m_child_iterator3CI3E.md | 0 .../stlab/forest.hpp/child_iterator3CI3E/m_operator--.md | 0 .../stlab/forest.hpp/child_iterator3CI3E/m_operator-3E.md | 0 .../stlab/forest.hpp/child_iterator3CI3E/m_operator2A.md | 0 .../stlab/forest.hpp/child_iterator3CI3E/m_operator2B2B.md | 0 .../stlab/forest.hpp/depth_fullorder_iterator3CI3E/index.md | 0 .../stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_base.md | 0 .../stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_depth.md | 0 .../m_depth_fullorder_iterator3CI3E.md | 0 .../stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_edge.md | 0 .../forest.hpp/depth_fullorder_iterator3CI3E/m_equal_node.md | 0 .../forest.hpp/depth_fullorder_iterator3CI3E/m_operator--.md | 0 .../forest.hpp/depth_fullorder_iterator3CI3E/m_operator-3E.md | 0 .../forest.hpp/depth_fullorder_iterator3CI3E/m_operator2A.md | 0 .../forest.hpp/depth_fullorder_iterator3CI3E/m_operator2B2B.md | 0 .../stlab/forest.hpp/edge_iterator3CI2C20Edge3E/index.md | 0 .../stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_base.md | 0 .../edge_iterator3CI2C20Edge3E/m_edge_iterator3CI2C20Edge3E.md | 0 .../stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_operator--.md | 0 .../stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_operator-3E.md | 0 .../stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_operator2A.md | 0 .../stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_operator2B2B.md | 0 docs/{includes => include}/stlab/forest.hpp/f_child_begin.md | 0 docs/{includes => include}/stlab/forest.hpp/f_child_end.md | 0 docs/{includes => include}/stlab/forest.hpp/f_child_range.md | 0 docs/{includes => include}/stlab/forest.hpp/f_depth_range.md | 0 .../stlab/forest.hpp/f_filter_fullorder_range.md | 0 docs/{includes => include}/stlab/forest.hpp/f_find_edge.md | 0 .../{includes => include}/stlab/forest.hpp/f_find_edge_reverse.md | 0 docs/{includes => include}/stlab/forest.hpp/f_find_parent.md | 0 docs/{includes => include}/stlab/forest.hpp/f_has_children.md | 0 docs/{includes => include}/stlab/forest.hpp/f_is_leading.md | 0 docs/{includes => include}/stlab/forest.hpp/f_is_trailing.md | 0 docs/{includes => include}/stlab/forest.hpp/f_leading_of.md | 0 docs/{includes => include}/stlab/forest.hpp/f_pivot.md | 0 docs/{includes => include}/stlab/forest.hpp/f_pivot_of.md | 0 docs/{includes => include}/stlab/forest.hpp/f_postorder_range.md | 0 docs/{includes => include}/stlab/forest.hpp/f_preorder_range.md | 0 .../stlab/forest.hpp/f_reverse_fullorder_range.md | 0 docs/{includes => include}/stlab/forest.hpp/f_trailing_of.md | 0 .../stlab/forest.hpp/filter_fullorder_iterat.e37adade/index.md | 0 .../stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_base.md | 0 .../filter_fullorder_iterat.e37adade/m_base_reference.md | 0 .../stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_edge.md | 0 .../forest.hpp/filter_fullorder_iterat.e37adade/m_equal_node.md | 0 .../m_filter_fullorder_iterator3CI2C20P3E.md | 0 .../forest.hpp/filter_fullorder_iterat.e37adade/m_operator--.md | 0 .../forest.hpp/filter_fullorder_iterat.e37adade/m_operator-3E.md | 0 .../forest.hpp/filter_fullorder_iterat.e37adade/m_operator2A.md | 0 .../forest.hpp/filter_fullorder_iterat.e37adade/m_operator2B2B.md | 0 .../forest.hpp/filter_fullorder_iterat.e37adade/m_predicate.md | 0 docs/{includes => include}/stlab/forest.hpp/forest3CT3E/index.md | 0 docs/{includes => include}/stlab/forest.hpp/forest3CT3E/m_back.md | 0 .../{includes => include}/stlab/forest.hpp/forest3CT3E/m_begin.md | 0 .../{includes => include}/stlab/forest.hpp/forest3CT3E/m_clear.md | 0 .../{includes => include}/stlab/forest.hpp/forest3CT3E/m_empty.md | 0 docs/{includes => include}/stlab/forest.hpp/forest3CT3E/m_end.md | 0 .../{includes => include}/stlab/forest.hpp/forest3CT3E/m_erase.md | 0 .../stlab/forest.hpp/forest3CT3E/m_forest3CT3E.md | 0 .../{includes => include}/stlab/forest.hpp/forest3CT3E/m_front.md | 0 .../stlab/forest.hpp/forest3CT3E/m_insert.md | 0 .../stlab/forest.hpp/forest3CT3E/m_insert_parent.md | 0 .../stlab/forest.hpp/forest3CT3E/m_max_size.md | 0 .../stlab/forest.hpp/forest3CT3E/m_operator3D.md | 0 .../stlab/forest.hpp/forest3CT3E/m_pop_back.md | 0 .../stlab/forest.hpp/forest3CT3E/m_pop_front.md | 0 .../stlab/forest.hpp/forest3CT3E/m_push_back.md | 0 .../stlab/forest.hpp/forest3CT3E/m_push_front.md | 0 .../stlab/forest.hpp/forest3CT3E/m_rbegin.md | 0 docs/{includes => include}/stlab/forest.hpp/forest3CT3E/m_rend.md | 0 .../stlab/forest.hpp/forest3CT3E/m_reverse.md | 0 docs/{includes => include}/stlab/forest.hpp/forest3CT3E/m_root.md | 0 docs/{includes => include}/stlab/forest.hpp/forest3CT3E/m_size.md | 0 .../stlab/forest.hpp/forest3CT3E/m_size_valid.md | 0 .../stlab/forest.hpp/forest3CT3E/m_splice.md | 0 docs/{includes => include}/stlab/forest.hpp/forest3CT3E/m_swap.md | 0 .../stlab/forest.hpp/forest3CT3E/m_~forest3CT3E.md | 0 .../stlab/forest.hpp/forest_range3CI3E/index.md | 0 .../stlab/forest.hpp/forest_range3CI3E/m_begin.md | 0 .../stlab/forest.hpp/forest_range3CI3E/m_end.md | 0 docs/{includes => include}/stlab/forest.hpp/index.md | 0 .../stlab/forest.hpp/reverse_fullorder_iterator3CI3E/index.md | 0 .../stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_base.md | 0 .../stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_edge.md | 0 .../forest.hpp/reverse_fullorder_iterator3CI3E/m_equal_node.md | 0 .../forest.hpp/reverse_fullorder_iterator3CI3E/m_operator--.md | 0 .../forest.hpp/reverse_fullorder_iterator3CI3E/m_operator-3E.md | 0 .../forest.hpp/reverse_fullorder_iterator3CI3E/m_operator2A.md | 0 .../forest.hpp/reverse_fullorder_iterator3CI3E/m_operator2B2B.md | 0 .../m_reverse_fullorder_iterator3CI3E.md | 0 .../stlab/forest.hpp/set_next_fn3Cchild_iter.f83e6c4a/index.md | 0 .../forest.hpp/set_next_fn3Cchild_iter.f83e6c4a/m_operator2829.md | 0 .../stlab/forest.hpp/set_next_fn3Cdetail3A3A.41bceb57/index.md | 0 .../forest.hpp/set_next_fn3Cdetail3A3A.41bceb57/m_operator2829.md | 0 .../stlab/forest.hpp/stlab3A3Aforest_edge.md | 0 .../stlab/forest_algorithms.hpp/f_equal_shape.md | 0 .../stlab/forest_algorithms.hpp/f_flatten.md | 0 .../stlab/forest_algorithms.hpp/f_transcribe.md | 0 .../stlab/forest_algorithms.hpp/f_transcriber.md | 0 .../stlab/forest_algorithms.hpp/f_unflatten.md | 0 docs/{includes => include}/stlab/forest_algorithms.hpp/index.md | 0 .../transcribe_iterator3CContainer3E/index.md | 0 .../transcribe_iterator3CContainer3E/m_operator2A.md | 0 .../transcribe_iterator3CContainer3E/m_operator2B2B.md | 0 .../transcribe_iterator3CContainer3E/m_operator3D.md | 0 .../transcribe_iterator3CContainer3E/m_trailing.md | 0 .../m_transcribe_iterator3CContainer3E.md | 0 docs/{includes => include}/stlab/functional.hpp/f_unwrap.md | 0 docs/{includes => include}/stlab/functional.hpp/index.md | 0 .../stlab/functional.hpp/is_reference_wrapper3CT3E/index.md | 0 .../functional.hpp/is_reference_wrapper3Cs.63c6d6bf/index.md | 0 .../stlab/functional.hpp/unwrap_reference3CT3E/index.md | 0 .../functional.hpp/unwrap_reference3Cstd3A.d26820ce/index.md | 0 docs/{includes => include}/stlab/index.md | 0 docs/{includes => include}/stlab/iterator/concepts.hpp/index.md | 0 docs/{includes => include}/stlab/iterator/index.md | 0 .../stlab/iterator/set_next.hpp/f_set_next.md | 0 .../stlab/iterator/set_next.hpp/f_skip_next_node.md | 0 .../stlab/iterator/set_next.hpp/f_skip_node.md | 0 .../stlab/iterator/set_next.hpp/f_splice_node_range.md | 0 docs/{includes => include}/stlab/iterator/set_next.hpp/index.md | 0 docs/{includes => include}/stlab/memory.hpp/f_make_weak_ptr.md | 0 docs/{includes => include}/stlab/memory.hpp/index.md | 0 docs/{includes => include}/stlab/pre_exit.hpp/f_at_pre_exit.md | 0 docs/{includes => include}/stlab/pre_exit.hpp/f_pre_exit.md | 0 docs/{includes => include}/stlab/pre_exit.hpp/index.md | 0 docs/{includes => include}/stlab/scope.hpp/f_scope.md | 0 docs/{includes => include}/stlab/scope.hpp/index.md | 0 docs/{includes => include}/stlab/scope.hpp/scope_example.cpp | 0 .../stlab/scope.hpp/scope_example_return.cpp | 0 docs/{includes => include}/stlab/test/index.md | 0 .../stlab/test/model.hpp/annotate/annotate_rvo_example.cpp | 0 .../stlab/test/model.hpp/annotate/f_operator213D.md | 0 .../stlab/test/model.hpp/annotate/f_operator3D3D.md | 0 .../{includes => include}/stlab/test/model.hpp/annotate/f_swap.md | 0 docs/{includes => include}/stlab/test/model.hpp/annotate/index.md | 0 .../stlab/test/model.hpp/annotate/m_annotate.md | 0 .../stlab/test/model.hpp/annotate/m_operator3D.md | 0 .../stlab/test/model.hpp/annotate/m_~annotate.md | 0 .../stlab/test/model.hpp/annotate_counters/f_operator3C3C.md | 0 .../stlab/test/model.hpp/annotate_counters/index.md | 0 .../stlab/test/model.hpp/annotate_counters/m_annotate_counters.md | 0 .../stlab/test/model.hpp/annotate_counters/m_operator3D.md | 0 .../stlab/test/model.hpp/annotate_counters/m_remaining.md | 0 .../stlab/test/model.hpp/annotate_counters/m_wait.md | 0 .../test/model.hpp/annotate_counters/m_~annotate_counters.md | 0 docs/{includes => include}/stlab/test/model.hpp/index.md | 0 .../{includes => include}/stlab/test/model.hpp/move_only/index.md | 0 .../stlab/test/model.hpp/move_only/m_member.md | 0 .../stlab/test/model.hpp/move_only/m_move_only.md | 0 .../stlab/test/model.hpp/move_only/m_operator3D.md | 0 .../stlab/test/model.hpp/move_only/m_~move_only.md | 0 .../stlab/test/model.hpp/move_only/move_only_rvo_example.cpp | 0 .../stlab/test/model.hpp/regular/f_operator3C.md | 0 docs/{includes => include}/stlab/test/model.hpp/regular/index.md | 0 .../stlab/test/model.hpp/regular/m_operator3D.md | 0 .../stlab/test/model.hpp/regular/m_regular.md | 0 .../stlab/test/model.hpp/regular/m_~regular.md | 0 .../stlab/test/model.hpp/regular/regular_example.cpp | 0 docs/{includes => include}/stlab/utility.hpp/f_copy.md | 0 .../stlab/utility.hpp/f_for_each_argument.md | 0 docs/{includes => include}/stlab/utility.hpp/f_move.md | 0 docs/{includes => include}/stlab/utility.hpp/f_move_if.md | 0 .../stlab/utility.hpp/for_each_argument_example.cpp | 0 docs/{includes => include}/stlab/utility.hpp/index.md | 0 .../stlab/utility.hpp/index_sequence_cat3Cstd.a7253ebe/index.md | 0 .../stlab/utility.hpp/index_sequence_to_array.aa88b8ea/index.md | 0 .../stlab/utility.hpp/index_sequence_transfor.3fb0d0a1/index.md | 0 .../stlab/utility.hpp/index_sequence_transfor.e996655e/index.md | 0 .../stlab/utility.hpp/index_sequence_transfor.eee092e1/index.md | 0 docs/{includes => include}/stlab/version.hpp/index.md | 0 475 files changed, 0 insertions(+), 0 deletions(-) rename docs/{includes => include}/index.md (100%) rename docs/{includes => include}/stlab/algorithm/index.md (100%) rename docs/{includes => include}/stlab/algorithm/reverse.hpp/f_reverse.md (100%) rename docs/{includes => include}/stlab/algorithm/reverse.hpp/f_reverse_append.md (100%) rename docs/{includes => include}/stlab/algorithm/reverse.hpp/f_reverse_copy.md (100%) rename docs/{includes => include}/stlab/algorithm/reverse.hpp/f_reverse_nodes.md (100%) rename docs/{includes => include}/stlab/algorithm/reverse.hpp/f_reverse_until.md (100%) rename docs/{includes => include}/stlab/algorithm/reverse.hpp/index.md (100%) rename docs/{includes => include}/stlab/concurrency/await.hpp/f_await.md (100%) rename docs/{includes => include}/stlab/concurrency/await.hpp/f_await_for.md (100%) rename docs/{includes => include}/stlab/concurrency/await.hpp/f_blocking_get.md (100%) rename docs/{includes => include}/stlab/concurrency/await.hpp/f_blocking_get_for.md (100%) rename docs/{includes => include}/stlab/concurrency/await.hpp/f_invoke_waiting.md (100%) rename docs/{includes => include}/stlab/concurrency/await.hpp/index.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/argument_of3CR2028Arg293E/index.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/buffer_size/buffer_size_example.cpp (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/buffer_size/index.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/buffer_size/m_buffer_size.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/channel_error/index.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/channel_error/m_channel_error.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/channel_error/m_code.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/channel_error/m_operator3D.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/channel_error/m_what.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/channel_error/m_~channel_error.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/channel_example.cpp (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/f_channel.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/f_for_each_n.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/f_join.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/f_merge.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/f_merge_channel.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/f_operator26.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/f_zip.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/f_zip_with.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/first_3CT12C20T3E/index.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/function_process3CR2028.9cd1ac2f/index.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/function_process3CR2028.9cd1ac2f/m_await.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/function_process3CR2028.9cd1ac2f/m_function_process3CR2028Args293E.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/function_process3CR2028.9cd1ac2f/m_state.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/function_process3CR2028.9cd1ac2f/m_yield.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/identity/index.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/identity/m_identity.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/identity/m_operator2829.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/identity/m_~identity.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/index.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/merge_channel_example.cpp (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/receiver3CT3E/f_operator213D.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/receiver3CT3E/f_operator3D3D.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/receiver3CT3E/f_swap.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/receiver3CT3E/index.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/receiver3CT3E/m_operator3D.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/receiver3CT3E/m_operator7C.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/receiver3CT3E/m_ready.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/receiver3CT3E/m_receiver3CT3E.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/receiver3CT3E/m_set_ready.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/receiver3CT3E/m_swap.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/receiver3CT3E/m_~receiver3CT3E.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/receiver3CT3E/operator_pipe_example.cpp (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/receiver3CT3E/set_ready_example.cpp (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/result_of_3CR2028Args293E/index.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/round_robin_t/index.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/call_operator_example.cpp (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/close_example.cpp (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/index.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/m_close.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/m_free_buffer.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/m_operator2829.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/m_operator3D.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/m_sender3CT2C20typename20enable_if3C21smart_is_copy_constructible_v3CT3E2C20void3E3A3Atype3E.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/m_swap.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/m_~sender3CT2C20typename20enable_if3C21smart_is_copy_constructible_v3CT3E2C20void3E3A3Atype3E.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/call_operator_example.cpp (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/close_example.cpp (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/index.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/m_close.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/m_free_buffer.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/m_operator2829.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/m_operator3D.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/m_sender3CT2C20typename20enable_if3Csmart_is_copy_constructible_v3CT3E2C20void3E3A3Atype3E.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/m_swap.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/m_~sender3CT2C20typename20enable_if3Csmart_is_copy_constructible_v3CT3E2C20void3E3A3Atype3E.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/stlab3A3Av33A3Achannel_error_codes.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/stlab3A3Av33A3Amessage_t.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/stlab3A3Av33A3Aprocess_state.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/unordered_t/index.md (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/zip_example.cpp (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/zip_with_example.cpp (100%) rename docs/{includes => include}/stlab/concurrency/channel.hpp/zip_with_t/index.md (100%) rename docs/{includes => include}/stlab/concurrency/concurrency.hpp/index.md (100%) rename docs/{includes => include}/stlab/concurrency/default_executor.hpp/index.md (100%) rename docs/{includes => include}/stlab/concurrency/executor_base.hpp/executor/index.md (100%) rename docs/{includes => include}/stlab/concurrency/executor_base.hpp/executor/m_executor.md (100%) rename docs/{includes => include}/stlab/concurrency/executor_base.hpp/executor/m_operator3D.md (100%) rename docs/{includes => include}/stlab/concurrency/executor_base.hpp/executor_task_pair3CF3E/index.md (100%) rename docs/{includes => include}/stlab/concurrency/executor_base.hpp/f_execute_at.md (100%) rename docs/{includes => include}/stlab/concurrency/executor_base.hpp/f_execute_delayed.md (100%) rename docs/{includes => include}/stlab/concurrency/executor_base.hpp/f_operator26.md (100%) rename docs/{includes => include}/stlab/concurrency/executor_base.hpp/index.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/async_example.cpp (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/f_async.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/f_invoke_remove_monostate_arguments.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/f_invoke_void_to_monostate_result.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/f_monostate_to_empty_tuple.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/f_monostate_to_void.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/f_optional_monostate_to_bool.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/f_when_all.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/f_when_any.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future/f_operator213D.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future/f_operator3D3D.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future/f_swap.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/index.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_detach.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_error.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_exception.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_future3CT2C20typename20enable_if3Csmart_is_copy_constructible_v3Ctypename20void_to_monostate3CT3E3A3Atype3E2C20void3E3A3Atype3E.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_get_ready.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_get_try.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_is_ready.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_operator5E.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_operator7C.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_recover.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_reset.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_swap.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_then.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_valid.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/index.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_detach.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_error.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_exception.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_future3CT2C20typename20enable_if3C21smart_is_copy_constructible_v3Ctypename20void_to_monostate3CT3E3A3Atype3E2C20void3E3A3Atype3E.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_get_ready.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_get_try.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_is_ready.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_operator3D.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_operator5E.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_operator7C.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_recover.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_reset.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_swap.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_then.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_valid.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future_error/index.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future_error/m_code.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future_error/m_future_error.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future_error/m_operator3D.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future_error/m_what.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/future_error/m_~future_error.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/index.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/make_when_any3CT3E/index.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/make_when_any3CT3E/m_make.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/make_when_any3Cvoid3E/index.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/make_when_any3Cvoid3E/m_make.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/packaged_task/f_future_with_broken_promise.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/packaged_task/f_package.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/packaged_task/package_example.cpp (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/packaged_task3CArgs3E/index.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/packaged_task3CArgs3E/m_canceled.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/packaged_task3CArgs3E/m_operator2829.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/packaged_task3CArgs3E/m_operator3D.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/packaged_task3CArgs3E/m_packaged_task3CArgs3E.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/packaged_task3CArgs3E/m_set_exception.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/packaged_task3CArgs3E/m_~packaged_task3CArgs3E.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/stlab3A3Av33A3Afuture_error_codes.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/void_to_monostate3CT3E/index.md (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/when_all_example.cpp (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/when_all_void_example.cpp (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/when_any_example.cpp (100%) rename docs/{includes => include}/stlab/concurrency/future.hpp/when_any_void_example.cpp (100%) rename docs/{includes => include}/stlab/concurrency/immediate_executor.hpp/index.md (100%) rename docs/{includes => include}/stlab/concurrency/index.md (100%) rename docs/{includes => include}/stlab/concurrency/main_executor.hpp/index.md (100%) rename docs/{includes => include}/stlab/concurrency/progress.hpp/index.md (100%) rename docs/{includes => include}/stlab/concurrency/progress.hpp/progress_tracker/index.md (100%) rename docs/{includes => include}/stlab/concurrency/progress.hpp/progress_tracker/m_completed.md (100%) rename docs/{includes => include}/stlab/concurrency/progress.hpp/progress_tracker/m_operator2829.md (100%) rename docs/{includes => include}/stlab/concurrency/progress.hpp/progress_tracker/m_operator3D.md (100%) rename docs/{includes => include}/stlab/concurrency/progress.hpp/progress_tracker/m_progress_tracker.md (100%) rename docs/{includes => include}/stlab/concurrency/progress.hpp/progress_tracker/m_steps.md (100%) rename docs/{includes => include}/stlab/concurrency/ready_future.hpp/f_make_exceptional_future.md (100%) rename docs/{includes => include}/stlab/concurrency/ready_future.hpp/f_make_ready_future.md (100%) rename docs/{includes => include}/stlab/concurrency/ready_future.hpp/index.md (100%) rename docs/{includes => include}/stlab/concurrency/serial_queue.hpp/index.md (100%) rename docs/{includes => include}/stlab/concurrency/serial_queue.hpp/serial_queue_t/index.md (100%) rename docs/{includes => include}/stlab/concurrency/serial_queue.hpp/serial_queue_t/m_executor.md (100%) rename docs/{includes => include}/stlab/concurrency/serial_queue.hpp/serial_queue_t/m_operator2829.md (100%) rename docs/{includes => include}/stlab/concurrency/serial_queue.hpp/serial_queue_t/m_operator3D.md (100%) rename docs/{includes => include}/stlab/concurrency/serial_queue.hpp/serial_queue_t/m_serial_queue_t.md (100%) rename docs/{includes => include}/stlab/concurrency/serial_queue.hpp/serial_queue_t/serial_queue_example.cpp (100%) rename docs/{includes => include}/stlab/concurrency/serial_queue.hpp/stlab3A3Av33A3Aschedule_mode.md (100%) rename docs/{includes => include}/stlab/concurrency/set_current_thread_name.hpp/f_set_current_thread_name.md (100%) rename docs/{includes => include}/stlab/concurrency/set_current_thread_name.hpp/index.md (100%) rename docs/{includes => include}/stlab/concurrency/system_timer.hpp/index.md (100%) rename docs/{includes => include}/stlab/concurrency/task.hpp/index.md (100%) rename docs/{includes => include}/stlab/concurrency/task.hpp/noexcept_deducer3CT2C20.26423853/index.md (100%) rename docs/{includes => include}/stlab/concurrency/task.hpp/noexcept_deducer3CT2C20.5812342b/index.md (100%) rename docs/{includes => include}/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/f_operator213D.md (100%) rename docs/{includes => include}/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/f_operator3D3D.md (100%) rename docs/{includes => include}/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/f_swap.md (100%) rename docs/{includes => include}/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/index.md (100%) rename docs/{includes => include}/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_operator20bool.md (100%) rename docs/{includes => include}/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_operator2829.md (100%) rename docs/{includes => include}/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_operator3D.md (100%) rename docs/{includes => include}/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_swap.md (100%) rename docs/{includes => include}/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_target.md (100%) rename docs/{includes => include}/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_target_type.md (100%) rename docs/{includes => include}/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_task_3CNoExcept2C20R2C20Args3E.md (100%) rename docs/{includes => include}/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_~task_3CNoExcept2C20R2C20Args3E.md (100%) rename docs/{includes => include}/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/index.md (100%) rename docs/{includes => include}/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/m_const_pointer.md (100%) rename docs/{includes => include}/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/m_dtor.md (100%) rename docs/{includes => include}/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/m_invoke.md (100%) rename docs/{includes => include}/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/m_model3CF2C20false3E.md (100%) rename docs/{includes => include}/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/m_move_ctor.md (100%) rename docs/{includes => include}/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/m_pointer.md (100%) rename docs/{includes => include}/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/m_target_type.md (100%) rename docs/{includes => include}/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/index.md (100%) rename docs/{includes => include}/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_const_pointer.md (100%) rename docs/{includes => include}/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_dtor.md (100%) rename docs/{includes => include}/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_invoke.md (100%) rename docs/{includes => include}/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_model3CF2C20true3E.md (100%) rename docs/{includes => include}/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_move_ctor.md (100%) rename docs/{includes => include}/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_pointer.md (100%) rename docs/{includes => include}/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_target_type.md (100%) rename docs/{includes => include}/stlab/concurrency/traits.hpp/detector3CDefault2C202C.c8fba2e1/index.md (100%) rename docs/{includes => include}/stlab/concurrency/traits.hpp/detector3CDefault2C20vo.a25dd5ae/index.md (100%) rename docs/{includes => include}/stlab/concurrency/traits.hpp/index.md (100%) rename docs/{includes => include}/stlab/concurrency/traits.hpp/nonesuch/index.md (100%) rename docs/{includes => include}/stlab/concurrency/traits.hpp/nonesuch/m_nonesuch.md (100%) rename docs/{includes => include}/stlab/concurrency/traits.hpp/nonesuch/m_operator3D.md (100%) rename docs/{includes => include}/stlab/concurrency/traits.hpp/nonesuch/m_~nonesuch.md (100%) rename docs/{includes => include}/stlab/concurrency/traits.hpp/smart_test3Ctest2C20T3E/index.md (100%) rename docs/{includes => include}/stlab/concurrency/tuple_algorithm.hpp/f_apply_ignore_placeholders.md (100%) rename docs/{includes => include}/stlab/concurrency/tuple_algorithm.hpp/f_apply_indexed.md (100%) rename docs/{includes => include}/stlab/concurrency/tuple_algorithm.hpp/f_get_i.md (100%) rename docs/{includes => include}/stlab/concurrency/tuple_algorithm.hpp/f_tuple_find.md (100%) rename docs/{includes => include}/stlab/concurrency/tuple_algorithm.hpp/f_tuple_for_each.md (100%) rename docs/{includes => include}/stlab/concurrency/tuple_algorithm.hpp/f_void_i.md (100%) rename docs/{includes => include}/stlab/concurrency/tuple_algorithm.hpp/index.md (100%) rename docs/{includes => include}/stlab/concurrency/tuple_algorithm.hpp/placeholder/index.md (100%) rename docs/{includes => include}/stlab/concurrency/tuple_algorithm.hpp/remove_placeholder3CTuple3E/function3CIndex3E/index.md (100%) rename docs/{includes => include}/stlab/concurrency/tuple_algorithm.hpp/remove_placeholder3CTuple3E/index.md (100%) rename docs/{includes => include}/stlab/concurrency/utility.hpp/index.md (100%) rename docs/{includes => include}/stlab/copy_on_write.hpp/copy_on_write3CT3E/f_operator213D.md (100%) rename docs/{includes => include}/stlab/copy_on_write.hpp/copy_on_write3CT3E/f_operator3C.md (100%) rename docs/{includes => include}/stlab/copy_on_write.hpp/copy_on_write3CT3E/f_operator3C3D.md (100%) rename docs/{includes => include}/stlab/copy_on_write.hpp/copy_on_write3CT3E/f_operator3D3D.md (100%) rename docs/{includes => include}/stlab/copy_on_write.hpp/copy_on_write3CT3E/f_operator3E.md (100%) rename docs/{includes => include}/stlab/copy_on_write.hpp/copy_on_write3CT3E/f_operator3E3D.md (100%) rename docs/{includes => include}/stlab/copy_on_write.hpp/copy_on_write3CT3E/f_swap.md (100%) rename docs/{includes => include}/stlab/copy_on_write.hpp/copy_on_write3CT3E/index.md (100%) rename docs/{includes => include}/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_copy_on_write3CT3E.md (100%) rename docs/{includes => include}/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_identity.md (100%) rename docs/{includes => include}/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_operator-3E.md (100%) rename docs/{includes => include}/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_operator20const20element_type2026.md (100%) rename docs/{includes => include}/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_operator2A.md (100%) rename docs/{includes => include}/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_operator3D.md (100%) rename docs/{includes => include}/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_read.md (100%) rename docs/{includes => include}/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_unique.md (100%) rename docs/{includes => include}/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_unique_instance.md (100%) rename docs/{includes => include}/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_write.md (100%) rename docs/{includes => include}/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_~copy_on_write3CT3E.md (100%) rename docs/{includes => include}/stlab/copy_on_write.hpp/index.md (100%) rename docs/{includes => include}/stlab/enum_ops.hpp/f_operator--.md (100%) rename docs/{includes => include}/stlab/enum_ops.hpp/f_operator-.md (100%) rename docs/{includes => include}/stlab/enum_ops.hpp/f_operator-3D.md (100%) rename docs/{includes => include}/stlab/enum_ops.hpp/f_operator21.md (100%) rename docs/{includes => include}/stlab/enum_ops.hpp/f_operator213D.md (100%) rename docs/{includes => include}/stlab/enum_ops.hpp/f_operator25.md (100%) rename docs/{includes => include}/stlab/enum_ops.hpp/f_operator253D.md (100%) rename docs/{includes => include}/stlab/enum_ops.hpp/f_operator26.md (100%) rename docs/{includes => include}/stlab/enum_ops.hpp/f_operator263D.md (100%) rename docs/{includes => include}/stlab/enum_ops.hpp/f_operator2A.md (100%) rename docs/{includes => include}/stlab/enum_ops.hpp/f_operator2A3D.md (100%) rename docs/{includes => include}/stlab/enum_ops.hpp/f_operator2B.md (100%) rename docs/{includes => include}/stlab/enum_ops.hpp/f_operator2B2B.md (100%) rename docs/{includes => include}/stlab/enum_ops.hpp/f_operator2B3D.md (100%) rename docs/{includes => include}/stlab/enum_ops.hpp/f_operator2F.md (100%) rename docs/{includes => include}/stlab/enum_ops.hpp/f_operator2F3D.md (100%) rename docs/{includes => include}/stlab/enum_ops.hpp/f_operator3C3C.md (100%) rename docs/{includes => include}/stlab/enum_ops.hpp/f_operator3C3C3D.md (100%) rename docs/{includes => include}/stlab/enum_ops.hpp/f_operator3D3D.md (100%) rename docs/{includes => include}/stlab/enum_ops.hpp/f_operator3E3E.md (100%) rename docs/{includes => include}/stlab/enum_ops.hpp/f_operator3E3E3D.md (100%) rename docs/{includes => include}/stlab/enum_ops.hpp/f_operator5E.md (100%) rename docs/{includes => include}/stlab/enum_ops.hpp/f_operator5E3D.md (100%) rename docs/{includes => include}/stlab/enum_ops.hpp/f_operator7C.md (100%) rename docs/{includes => include}/stlab/enum_ops.hpp/f_operator7C3D.md (100%) rename docs/{includes => include}/stlab/enum_ops.hpp/f_operator~.md (100%) rename docs/{includes => include}/stlab/enum_ops.hpp/f_stlab_enable_arithmetic_enum.md (100%) rename docs/{includes => include}/stlab/enum_ops.hpp/f_stlab_enable_bitmask_enum.md (100%) rename docs/{includes => include}/stlab/enum_ops.hpp/index.md (100%) rename docs/{includes => include}/stlab/enum_ops.hpp/safe_underlying_type3CT.399d3431/index.md (100%) rename docs/{includes => include}/stlab/enum_ops.hpp/safe_underlying_type3CT.af98cac6/index.md (100%) rename docs/{includes => include}/stlab/forest.hpp/child_adaptor3CForest3E/index.md (100%) rename docs/{includes => include}/stlab/forest.hpp/child_adaptor3CForest3E/m_back.md (100%) rename docs/{includes => include}/stlab/forest.hpp/child_adaptor3CForest3E/m_child_adaptor3CForest3E.md (100%) rename docs/{includes => include}/stlab/forest.hpp/child_adaptor3CForest3E/m_front.md (100%) rename docs/{includes => include}/stlab/forest.hpp/child_adaptor3CForest3E/m_pop_back.md (100%) rename docs/{includes => include}/stlab/forest.hpp/child_adaptor3CForest3E/m_pop_front.md (100%) rename docs/{includes => include}/stlab/forest.hpp/child_adaptor3CForest3E/m_push_back.md (100%) rename docs/{includes => include}/stlab/forest.hpp/child_adaptor3CForest3E/m_push_front.md (100%) rename docs/{includes => include}/stlab/forest.hpp/child_iterator3CI3E/f_operator213D.md (100%) rename docs/{includes => include}/stlab/forest.hpp/child_iterator3CI3E/f_operator3D3D.md (100%) rename docs/{includes => include}/stlab/forest.hpp/child_iterator3CI3E/index.md (100%) rename docs/{includes => include}/stlab/forest.hpp/child_iterator3CI3E/m_base.md (100%) rename docs/{includes => include}/stlab/forest.hpp/child_iterator3CI3E/m_child_iterator3CI3E.md (100%) rename docs/{includes => include}/stlab/forest.hpp/child_iterator3CI3E/m_operator--.md (100%) rename docs/{includes => include}/stlab/forest.hpp/child_iterator3CI3E/m_operator-3E.md (100%) rename docs/{includes => include}/stlab/forest.hpp/child_iterator3CI3E/m_operator2A.md (100%) rename docs/{includes => include}/stlab/forest.hpp/child_iterator3CI3E/m_operator2B2B.md (100%) rename docs/{includes => include}/stlab/forest.hpp/depth_fullorder_iterator3CI3E/index.md (100%) rename docs/{includes => include}/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_base.md (100%) rename docs/{includes => include}/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_depth.md (100%) rename docs/{includes => include}/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_depth_fullorder_iterator3CI3E.md (100%) rename docs/{includes => include}/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_edge.md (100%) rename docs/{includes => include}/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_equal_node.md (100%) rename docs/{includes => include}/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_operator--.md (100%) rename docs/{includes => include}/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_operator-3E.md (100%) rename docs/{includes => include}/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_operator2A.md (100%) rename docs/{includes => include}/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_operator2B2B.md (100%) rename docs/{includes => include}/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/index.md (100%) rename docs/{includes => include}/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_base.md (100%) rename docs/{includes => include}/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_edge_iterator3CI2C20Edge3E.md (100%) rename docs/{includes => include}/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_operator--.md (100%) rename docs/{includes => include}/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_operator-3E.md (100%) rename docs/{includes => include}/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_operator2A.md (100%) rename docs/{includes => include}/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_operator2B2B.md (100%) rename docs/{includes => include}/stlab/forest.hpp/f_child_begin.md (100%) rename docs/{includes => include}/stlab/forest.hpp/f_child_end.md (100%) rename docs/{includes => include}/stlab/forest.hpp/f_child_range.md (100%) rename docs/{includes => include}/stlab/forest.hpp/f_depth_range.md (100%) rename docs/{includes => include}/stlab/forest.hpp/f_filter_fullorder_range.md (100%) rename docs/{includes => include}/stlab/forest.hpp/f_find_edge.md (100%) rename docs/{includes => include}/stlab/forest.hpp/f_find_edge_reverse.md (100%) rename docs/{includes => include}/stlab/forest.hpp/f_find_parent.md (100%) rename docs/{includes => include}/stlab/forest.hpp/f_has_children.md (100%) rename docs/{includes => include}/stlab/forest.hpp/f_is_leading.md (100%) rename docs/{includes => include}/stlab/forest.hpp/f_is_trailing.md (100%) rename docs/{includes => include}/stlab/forest.hpp/f_leading_of.md (100%) rename docs/{includes => include}/stlab/forest.hpp/f_pivot.md (100%) rename docs/{includes => include}/stlab/forest.hpp/f_pivot_of.md (100%) rename docs/{includes => include}/stlab/forest.hpp/f_postorder_range.md (100%) rename docs/{includes => include}/stlab/forest.hpp/f_preorder_range.md (100%) rename docs/{includes => include}/stlab/forest.hpp/f_reverse_fullorder_range.md (100%) rename docs/{includes => include}/stlab/forest.hpp/f_trailing_of.md (100%) rename docs/{includes => include}/stlab/forest.hpp/filter_fullorder_iterat.e37adade/index.md (100%) rename docs/{includes => include}/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_base.md (100%) rename docs/{includes => include}/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_base_reference.md (100%) rename docs/{includes => include}/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_edge.md (100%) rename docs/{includes => include}/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_equal_node.md (100%) rename docs/{includes => include}/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_filter_fullorder_iterator3CI2C20P3E.md (100%) rename docs/{includes => include}/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_operator--.md (100%) rename docs/{includes => include}/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_operator-3E.md (100%) rename docs/{includes => include}/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_operator2A.md (100%) rename docs/{includes => include}/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_operator2B2B.md (100%) rename docs/{includes => include}/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_predicate.md (100%) rename docs/{includes => include}/stlab/forest.hpp/forest3CT3E/index.md (100%) rename docs/{includes => include}/stlab/forest.hpp/forest3CT3E/m_back.md (100%) rename docs/{includes => include}/stlab/forest.hpp/forest3CT3E/m_begin.md (100%) rename docs/{includes => include}/stlab/forest.hpp/forest3CT3E/m_clear.md (100%) rename docs/{includes => include}/stlab/forest.hpp/forest3CT3E/m_empty.md (100%) rename docs/{includes => include}/stlab/forest.hpp/forest3CT3E/m_end.md (100%) rename docs/{includes => include}/stlab/forest.hpp/forest3CT3E/m_erase.md (100%) rename docs/{includes => include}/stlab/forest.hpp/forest3CT3E/m_forest3CT3E.md (100%) rename docs/{includes => include}/stlab/forest.hpp/forest3CT3E/m_front.md (100%) rename docs/{includes => include}/stlab/forest.hpp/forest3CT3E/m_insert.md (100%) rename docs/{includes => include}/stlab/forest.hpp/forest3CT3E/m_insert_parent.md (100%) rename docs/{includes => include}/stlab/forest.hpp/forest3CT3E/m_max_size.md (100%) rename docs/{includes => include}/stlab/forest.hpp/forest3CT3E/m_operator3D.md (100%) rename docs/{includes => include}/stlab/forest.hpp/forest3CT3E/m_pop_back.md (100%) rename docs/{includes => include}/stlab/forest.hpp/forest3CT3E/m_pop_front.md (100%) rename docs/{includes => include}/stlab/forest.hpp/forest3CT3E/m_push_back.md (100%) rename docs/{includes => include}/stlab/forest.hpp/forest3CT3E/m_push_front.md (100%) rename docs/{includes => include}/stlab/forest.hpp/forest3CT3E/m_rbegin.md (100%) rename docs/{includes => include}/stlab/forest.hpp/forest3CT3E/m_rend.md (100%) rename docs/{includes => include}/stlab/forest.hpp/forest3CT3E/m_reverse.md (100%) rename docs/{includes => include}/stlab/forest.hpp/forest3CT3E/m_root.md (100%) rename docs/{includes => include}/stlab/forest.hpp/forest3CT3E/m_size.md (100%) rename docs/{includes => include}/stlab/forest.hpp/forest3CT3E/m_size_valid.md (100%) rename docs/{includes => include}/stlab/forest.hpp/forest3CT3E/m_splice.md (100%) rename docs/{includes => include}/stlab/forest.hpp/forest3CT3E/m_swap.md (100%) rename docs/{includes => include}/stlab/forest.hpp/forest3CT3E/m_~forest3CT3E.md (100%) rename docs/{includes => include}/stlab/forest.hpp/forest_range3CI3E/index.md (100%) rename docs/{includes => include}/stlab/forest.hpp/forest_range3CI3E/m_begin.md (100%) rename docs/{includes => include}/stlab/forest.hpp/forest_range3CI3E/m_end.md (100%) rename docs/{includes => include}/stlab/forest.hpp/index.md (100%) rename docs/{includes => include}/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/index.md (100%) rename docs/{includes => include}/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_base.md (100%) rename docs/{includes => include}/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_edge.md (100%) rename docs/{includes => include}/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_equal_node.md (100%) rename docs/{includes => include}/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_operator--.md (100%) rename docs/{includes => include}/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_operator-3E.md (100%) rename docs/{includes => include}/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_operator2A.md (100%) rename docs/{includes => include}/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_operator2B2B.md (100%) rename docs/{includes => include}/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_reverse_fullorder_iterator3CI3E.md (100%) rename docs/{includes => include}/stlab/forest.hpp/set_next_fn3Cchild_iter.f83e6c4a/index.md (100%) rename docs/{includes => include}/stlab/forest.hpp/set_next_fn3Cchild_iter.f83e6c4a/m_operator2829.md (100%) rename docs/{includes => include}/stlab/forest.hpp/set_next_fn3Cdetail3A3A.41bceb57/index.md (100%) rename docs/{includes => include}/stlab/forest.hpp/set_next_fn3Cdetail3A3A.41bceb57/m_operator2829.md (100%) rename docs/{includes => include}/stlab/forest.hpp/stlab3A3Aforest_edge.md (100%) rename docs/{includes => include}/stlab/forest_algorithms.hpp/f_equal_shape.md (100%) rename docs/{includes => include}/stlab/forest_algorithms.hpp/f_flatten.md (100%) rename docs/{includes => include}/stlab/forest_algorithms.hpp/f_transcribe.md (100%) rename docs/{includes => include}/stlab/forest_algorithms.hpp/f_transcriber.md (100%) rename docs/{includes => include}/stlab/forest_algorithms.hpp/f_unflatten.md (100%) rename docs/{includes => include}/stlab/forest_algorithms.hpp/index.md (100%) rename docs/{includes => include}/stlab/forest_algorithms.hpp/transcribe_iterator3CContainer3E/index.md (100%) rename docs/{includes => include}/stlab/forest_algorithms.hpp/transcribe_iterator3CContainer3E/m_operator2A.md (100%) rename docs/{includes => include}/stlab/forest_algorithms.hpp/transcribe_iterator3CContainer3E/m_operator2B2B.md (100%) rename docs/{includes => include}/stlab/forest_algorithms.hpp/transcribe_iterator3CContainer3E/m_operator3D.md (100%) rename docs/{includes => include}/stlab/forest_algorithms.hpp/transcribe_iterator3CContainer3E/m_trailing.md (100%) rename docs/{includes => include}/stlab/forest_algorithms.hpp/transcribe_iterator3CContainer3E/m_transcribe_iterator3CContainer3E.md (100%) rename docs/{includes => include}/stlab/functional.hpp/f_unwrap.md (100%) rename docs/{includes => include}/stlab/functional.hpp/index.md (100%) rename docs/{includes => include}/stlab/functional.hpp/is_reference_wrapper3CT3E/index.md (100%) rename docs/{includes => include}/stlab/functional.hpp/is_reference_wrapper3Cs.63c6d6bf/index.md (100%) rename docs/{includes => include}/stlab/functional.hpp/unwrap_reference3CT3E/index.md (100%) rename docs/{includes => include}/stlab/functional.hpp/unwrap_reference3Cstd3A.d26820ce/index.md (100%) rename docs/{includes => include}/stlab/index.md (100%) rename docs/{includes => include}/stlab/iterator/concepts.hpp/index.md (100%) rename docs/{includes => include}/stlab/iterator/index.md (100%) rename docs/{includes => include}/stlab/iterator/set_next.hpp/f_set_next.md (100%) rename docs/{includes => include}/stlab/iterator/set_next.hpp/f_skip_next_node.md (100%) rename docs/{includes => include}/stlab/iterator/set_next.hpp/f_skip_node.md (100%) rename docs/{includes => include}/stlab/iterator/set_next.hpp/f_splice_node_range.md (100%) rename docs/{includes => include}/stlab/iterator/set_next.hpp/index.md (100%) rename docs/{includes => include}/stlab/memory.hpp/f_make_weak_ptr.md (100%) rename docs/{includes => include}/stlab/memory.hpp/index.md (100%) rename docs/{includes => include}/stlab/pre_exit.hpp/f_at_pre_exit.md (100%) rename docs/{includes => include}/stlab/pre_exit.hpp/f_pre_exit.md (100%) rename docs/{includes => include}/stlab/pre_exit.hpp/index.md (100%) rename docs/{includes => include}/stlab/scope.hpp/f_scope.md (100%) rename docs/{includes => include}/stlab/scope.hpp/index.md (100%) rename docs/{includes => include}/stlab/scope.hpp/scope_example.cpp (100%) rename docs/{includes => include}/stlab/scope.hpp/scope_example_return.cpp (100%) rename docs/{includes => include}/stlab/test/index.md (100%) rename docs/{includes => include}/stlab/test/model.hpp/annotate/annotate_rvo_example.cpp (100%) rename docs/{includes => include}/stlab/test/model.hpp/annotate/f_operator213D.md (100%) rename docs/{includes => include}/stlab/test/model.hpp/annotate/f_operator3D3D.md (100%) rename docs/{includes => include}/stlab/test/model.hpp/annotate/f_swap.md (100%) rename docs/{includes => include}/stlab/test/model.hpp/annotate/index.md (100%) rename docs/{includes => include}/stlab/test/model.hpp/annotate/m_annotate.md (100%) rename docs/{includes => include}/stlab/test/model.hpp/annotate/m_operator3D.md (100%) rename docs/{includes => include}/stlab/test/model.hpp/annotate/m_~annotate.md (100%) rename docs/{includes => include}/stlab/test/model.hpp/annotate_counters/f_operator3C3C.md (100%) rename docs/{includes => include}/stlab/test/model.hpp/annotate_counters/index.md (100%) rename docs/{includes => include}/stlab/test/model.hpp/annotate_counters/m_annotate_counters.md (100%) rename docs/{includes => include}/stlab/test/model.hpp/annotate_counters/m_operator3D.md (100%) rename docs/{includes => include}/stlab/test/model.hpp/annotate_counters/m_remaining.md (100%) rename docs/{includes => include}/stlab/test/model.hpp/annotate_counters/m_wait.md (100%) rename docs/{includes => include}/stlab/test/model.hpp/annotate_counters/m_~annotate_counters.md (100%) rename docs/{includes => include}/stlab/test/model.hpp/index.md (100%) rename docs/{includes => include}/stlab/test/model.hpp/move_only/index.md (100%) rename docs/{includes => include}/stlab/test/model.hpp/move_only/m_member.md (100%) rename docs/{includes => include}/stlab/test/model.hpp/move_only/m_move_only.md (100%) rename docs/{includes => include}/stlab/test/model.hpp/move_only/m_operator3D.md (100%) rename docs/{includes => include}/stlab/test/model.hpp/move_only/m_~move_only.md (100%) rename docs/{includes => include}/stlab/test/model.hpp/move_only/move_only_rvo_example.cpp (100%) rename docs/{includes => include}/stlab/test/model.hpp/regular/f_operator3C.md (100%) rename docs/{includes => include}/stlab/test/model.hpp/regular/index.md (100%) rename docs/{includes => include}/stlab/test/model.hpp/regular/m_operator3D.md (100%) rename docs/{includes => include}/stlab/test/model.hpp/regular/m_regular.md (100%) rename docs/{includes => include}/stlab/test/model.hpp/regular/m_~regular.md (100%) rename docs/{includes => include}/stlab/test/model.hpp/regular/regular_example.cpp (100%) rename docs/{includes => include}/stlab/utility.hpp/f_copy.md (100%) rename docs/{includes => include}/stlab/utility.hpp/f_for_each_argument.md (100%) rename docs/{includes => include}/stlab/utility.hpp/f_move.md (100%) rename docs/{includes => include}/stlab/utility.hpp/f_move_if.md (100%) rename docs/{includes => include}/stlab/utility.hpp/for_each_argument_example.cpp (100%) rename docs/{includes => include}/stlab/utility.hpp/index.md (100%) rename docs/{includes => include}/stlab/utility.hpp/index_sequence_cat3Cstd.a7253ebe/index.md (100%) rename docs/{includes => include}/stlab/utility.hpp/index_sequence_to_array.aa88b8ea/index.md (100%) rename docs/{includes => include}/stlab/utility.hpp/index_sequence_transfor.3fb0d0a1/index.md (100%) rename docs/{includes => include}/stlab/utility.hpp/index_sequence_transfor.e996655e/index.md (100%) rename docs/{includes => include}/stlab/utility.hpp/index_sequence_transfor.eee092e1/index.md (100%) rename docs/{includes => include}/stlab/version.hpp/index.md (100%) diff --git a/docs/includes/index.md b/docs/include/index.md similarity index 100% rename from docs/includes/index.md rename to docs/include/index.md diff --git a/docs/includes/stlab/algorithm/index.md b/docs/include/stlab/algorithm/index.md similarity index 100% rename from docs/includes/stlab/algorithm/index.md rename to docs/include/stlab/algorithm/index.md diff --git a/docs/includes/stlab/algorithm/reverse.hpp/f_reverse.md b/docs/include/stlab/algorithm/reverse.hpp/f_reverse.md similarity index 100% rename from docs/includes/stlab/algorithm/reverse.hpp/f_reverse.md rename to docs/include/stlab/algorithm/reverse.hpp/f_reverse.md diff --git a/docs/includes/stlab/algorithm/reverse.hpp/f_reverse_append.md b/docs/include/stlab/algorithm/reverse.hpp/f_reverse_append.md similarity index 100% rename from docs/includes/stlab/algorithm/reverse.hpp/f_reverse_append.md rename to docs/include/stlab/algorithm/reverse.hpp/f_reverse_append.md diff --git a/docs/includes/stlab/algorithm/reverse.hpp/f_reverse_copy.md b/docs/include/stlab/algorithm/reverse.hpp/f_reverse_copy.md similarity index 100% rename from docs/includes/stlab/algorithm/reverse.hpp/f_reverse_copy.md rename to docs/include/stlab/algorithm/reverse.hpp/f_reverse_copy.md diff --git a/docs/includes/stlab/algorithm/reverse.hpp/f_reverse_nodes.md b/docs/include/stlab/algorithm/reverse.hpp/f_reverse_nodes.md similarity index 100% rename from docs/includes/stlab/algorithm/reverse.hpp/f_reverse_nodes.md rename to docs/include/stlab/algorithm/reverse.hpp/f_reverse_nodes.md diff --git a/docs/includes/stlab/algorithm/reverse.hpp/f_reverse_until.md b/docs/include/stlab/algorithm/reverse.hpp/f_reverse_until.md similarity index 100% rename from docs/includes/stlab/algorithm/reverse.hpp/f_reverse_until.md rename to docs/include/stlab/algorithm/reverse.hpp/f_reverse_until.md diff --git a/docs/includes/stlab/algorithm/reverse.hpp/index.md b/docs/include/stlab/algorithm/reverse.hpp/index.md similarity index 100% rename from docs/includes/stlab/algorithm/reverse.hpp/index.md rename to docs/include/stlab/algorithm/reverse.hpp/index.md diff --git a/docs/includes/stlab/concurrency/await.hpp/f_await.md b/docs/include/stlab/concurrency/await.hpp/f_await.md similarity index 100% rename from docs/includes/stlab/concurrency/await.hpp/f_await.md rename to docs/include/stlab/concurrency/await.hpp/f_await.md diff --git a/docs/includes/stlab/concurrency/await.hpp/f_await_for.md b/docs/include/stlab/concurrency/await.hpp/f_await_for.md similarity index 100% rename from docs/includes/stlab/concurrency/await.hpp/f_await_for.md rename to docs/include/stlab/concurrency/await.hpp/f_await_for.md diff --git a/docs/includes/stlab/concurrency/await.hpp/f_blocking_get.md b/docs/include/stlab/concurrency/await.hpp/f_blocking_get.md similarity index 100% rename from docs/includes/stlab/concurrency/await.hpp/f_blocking_get.md rename to docs/include/stlab/concurrency/await.hpp/f_blocking_get.md diff --git a/docs/includes/stlab/concurrency/await.hpp/f_blocking_get_for.md b/docs/include/stlab/concurrency/await.hpp/f_blocking_get_for.md similarity index 100% rename from docs/includes/stlab/concurrency/await.hpp/f_blocking_get_for.md rename to docs/include/stlab/concurrency/await.hpp/f_blocking_get_for.md diff --git a/docs/includes/stlab/concurrency/await.hpp/f_invoke_waiting.md b/docs/include/stlab/concurrency/await.hpp/f_invoke_waiting.md similarity index 100% rename from docs/includes/stlab/concurrency/await.hpp/f_invoke_waiting.md rename to docs/include/stlab/concurrency/await.hpp/f_invoke_waiting.md diff --git a/docs/includes/stlab/concurrency/await.hpp/index.md b/docs/include/stlab/concurrency/await.hpp/index.md similarity index 100% rename from docs/includes/stlab/concurrency/await.hpp/index.md rename to docs/include/stlab/concurrency/await.hpp/index.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/argument_of3CR2028Arg293E/index.md b/docs/include/stlab/concurrency/channel.hpp/argument_of3CR2028Arg293E/index.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/argument_of3CR2028Arg293E/index.md rename to docs/include/stlab/concurrency/channel.hpp/argument_of3CR2028Arg293E/index.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/buffer_size/buffer_size_example.cpp b/docs/include/stlab/concurrency/channel.hpp/buffer_size/buffer_size_example.cpp similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/buffer_size/buffer_size_example.cpp rename to docs/include/stlab/concurrency/channel.hpp/buffer_size/buffer_size_example.cpp diff --git a/docs/includes/stlab/concurrency/channel.hpp/buffer_size/index.md b/docs/include/stlab/concurrency/channel.hpp/buffer_size/index.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/buffer_size/index.md rename to docs/include/stlab/concurrency/channel.hpp/buffer_size/index.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/buffer_size/m_buffer_size.md b/docs/include/stlab/concurrency/channel.hpp/buffer_size/m_buffer_size.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/buffer_size/m_buffer_size.md rename to docs/include/stlab/concurrency/channel.hpp/buffer_size/m_buffer_size.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/channel_error/index.md b/docs/include/stlab/concurrency/channel.hpp/channel_error/index.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/channel_error/index.md rename to docs/include/stlab/concurrency/channel.hpp/channel_error/index.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/channel_error/m_channel_error.md b/docs/include/stlab/concurrency/channel.hpp/channel_error/m_channel_error.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/channel_error/m_channel_error.md rename to docs/include/stlab/concurrency/channel.hpp/channel_error/m_channel_error.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/channel_error/m_code.md b/docs/include/stlab/concurrency/channel.hpp/channel_error/m_code.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/channel_error/m_code.md rename to docs/include/stlab/concurrency/channel.hpp/channel_error/m_code.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/channel_error/m_operator3D.md b/docs/include/stlab/concurrency/channel.hpp/channel_error/m_operator3D.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/channel_error/m_operator3D.md rename to docs/include/stlab/concurrency/channel.hpp/channel_error/m_operator3D.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/channel_error/m_what.md b/docs/include/stlab/concurrency/channel.hpp/channel_error/m_what.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/channel_error/m_what.md rename to docs/include/stlab/concurrency/channel.hpp/channel_error/m_what.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/channel_error/m_~channel_error.md b/docs/include/stlab/concurrency/channel.hpp/channel_error/m_~channel_error.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/channel_error/m_~channel_error.md rename to docs/include/stlab/concurrency/channel.hpp/channel_error/m_~channel_error.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/channel_example.cpp b/docs/include/stlab/concurrency/channel.hpp/channel_example.cpp similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/channel_example.cpp rename to docs/include/stlab/concurrency/channel.hpp/channel_example.cpp diff --git a/docs/includes/stlab/concurrency/channel.hpp/f_channel.md b/docs/include/stlab/concurrency/channel.hpp/f_channel.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/f_channel.md rename to docs/include/stlab/concurrency/channel.hpp/f_channel.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/f_for_each_n.md b/docs/include/stlab/concurrency/channel.hpp/f_for_each_n.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/f_for_each_n.md rename to docs/include/stlab/concurrency/channel.hpp/f_for_each_n.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/f_join.md b/docs/include/stlab/concurrency/channel.hpp/f_join.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/f_join.md rename to docs/include/stlab/concurrency/channel.hpp/f_join.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/f_merge.md b/docs/include/stlab/concurrency/channel.hpp/f_merge.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/f_merge.md rename to docs/include/stlab/concurrency/channel.hpp/f_merge.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/f_merge_channel.md b/docs/include/stlab/concurrency/channel.hpp/f_merge_channel.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/f_merge_channel.md rename to docs/include/stlab/concurrency/channel.hpp/f_merge_channel.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/f_operator26.md b/docs/include/stlab/concurrency/channel.hpp/f_operator26.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/f_operator26.md rename to docs/include/stlab/concurrency/channel.hpp/f_operator26.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/f_zip.md b/docs/include/stlab/concurrency/channel.hpp/f_zip.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/f_zip.md rename to docs/include/stlab/concurrency/channel.hpp/f_zip.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/f_zip_with.md b/docs/include/stlab/concurrency/channel.hpp/f_zip_with.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/f_zip_with.md rename to docs/include/stlab/concurrency/channel.hpp/f_zip_with.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/first_3CT12C20T3E/index.md b/docs/include/stlab/concurrency/channel.hpp/first_3CT12C20T3E/index.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/first_3CT12C20T3E/index.md rename to docs/include/stlab/concurrency/channel.hpp/first_3CT12C20T3E/index.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/function_process3CR2028.9cd1ac2f/index.md b/docs/include/stlab/concurrency/channel.hpp/function_process3CR2028.9cd1ac2f/index.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/function_process3CR2028.9cd1ac2f/index.md rename to docs/include/stlab/concurrency/channel.hpp/function_process3CR2028.9cd1ac2f/index.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/function_process3CR2028.9cd1ac2f/m_await.md b/docs/include/stlab/concurrency/channel.hpp/function_process3CR2028.9cd1ac2f/m_await.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/function_process3CR2028.9cd1ac2f/m_await.md rename to docs/include/stlab/concurrency/channel.hpp/function_process3CR2028.9cd1ac2f/m_await.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/function_process3CR2028.9cd1ac2f/m_function_process3CR2028Args293E.md b/docs/include/stlab/concurrency/channel.hpp/function_process3CR2028.9cd1ac2f/m_function_process3CR2028Args293E.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/function_process3CR2028.9cd1ac2f/m_function_process3CR2028Args293E.md rename to docs/include/stlab/concurrency/channel.hpp/function_process3CR2028.9cd1ac2f/m_function_process3CR2028Args293E.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/function_process3CR2028.9cd1ac2f/m_state.md b/docs/include/stlab/concurrency/channel.hpp/function_process3CR2028.9cd1ac2f/m_state.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/function_process3CR2028.9cd1ac2f/m_state.md rename to docs/include/stlab/concurrency/channel.hpp/function_process3CR2028.9cd1ac2f/m_state.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/function_process3CR2028.9cd1ac2f/m_yield.md b/docs/include/stlab/concurrency/channel.hpp/function_process3CR2028.9cd1ac2f/m_yield.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/function_process3CR2028.9cd1ac2f/m_yield.md rename to docs/include/stlab/concurrency/channel.hpp/function_process3CR2028.9cd1ac2f/m_yield.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/identity/index.md b/docs/include/stlab/concurrency/channel.hpp/identity/index.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/identity/index.md rename to docs/include/stlab/concurrency/channel.hpp/identity/index.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/identity/m_identity.md b/docs/include/stlab/concurrency/channel.hpp/identity/m_identity.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/identity/m_identity.md rename to docs/include/stlab/concurrency/channel.hpp/identity/m_identity.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/identity/m_operator2829.md b/docs/include/stlab/concurrency/channel.hpp/identity/m_operator2829.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/identity/m_operator2829.md rename to docs/include/stlab/concurrency/channel.hpp/identity/m_operator2829.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/identity/m_~identity.md b/docs/include/stlab/concurrency/channel.hpp/identity/m_~identity.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/identity/m_~identity.md rename to docs/include/stlab/concurrency/channel.hpp/identity/m_~identity.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/index.md b/docs/include/stlab/concurrency/channel.hpp/index.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/index.md rename to docs/include/stlab/concurrency/channel.hpp/index.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/merge_channel_example.cpp b/docs/include/stlab/concurrency/channel.hpp/merge_channel_example.cpp similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/merge_channel_example.cpp rename to docs/include/stlab/concurrency/channel.hpp/merge_channel_example.cpp diff --git a/docs/includes/stlab/concurrency/channel.hpp/receiver3CT3E/f_operator213D.md b/docs/include/stlab/concurrency/channel.hpp/receiver3CT3E/f_operator213D.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/receiver3CT3E/f_operator213D.md rename to docs/include/stlab/concurrency/channel.hpp/receiver3CT3E/f_operator213D.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/receiver3CT3E/f_operator3D3D.md b/docs/include/stlab/concurrency/channel.hpp/receiver3CT3E/f_operator3D3D.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/receiver3CT3E/f_operator3D3D.md rename to docs/include/stlab/concurrency/channel.hpp/receiver3CT3E/f_operator3D3D.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/receiver3CT3E/f_swap.md b/docs/include/stlab/concurrency/channel.hpp/receiver3CT3E/f_swap.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/receiver3CT3E/f_swap.md rename to docs/include/stlab/concurrency/channel.hpp/receiver3CT3E/f_swap.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/receiver3CT3E/index.md b/docs/include/stlab/concurrency/channel.hpp/receiver3CT3E/index.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/receiver3CT3E/index.md rename to docs/include/stlab/concurrency/channel.hpp/receiver3CT3E/index.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/receiver3CT3E/m_operator3D.md b/docs/include/stlab/concurrency/channel.hpp/receiver3CT3E/m_operator3D.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/receiver3CT3E/m_operator3D.md rename to docs/include/stlab/concurrency/channel.hpp/receiver3CT3E/m_operator3D.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/receiver3CT3E/m_operator7C.md b/docs/include/stlab/concurrency/channel.hpp/receiver3CT3E/m_operator7C.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/receiver3CT3E/m_operator7C.md rename to docs/include/stlab/concurrency/channel.hpp/receiver3CT3E/m_operator7C.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/receiver3CT3E/m_ready.md b/docs/include/stlab/concurrency/channel.hpp/receiver3CT3E/m_ready.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/receiver3CT3E/m_ready.md rename to docs/include/stlab/concurrency/channel.hpp/receiver3CT3E/m_ready.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/receiver3CT3E/m_receiver3CT3E.md b/docs/include/stlab/concurrency/channel.hpp/receiver3CT3E/m_receiver3CT3E.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/receiver3CT3E/m_receiver3CT3E.md rename to docs/include/stlab/concurrency/channel.hpp/receiver3CT3E/m_receiver3CT3E.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/receiver3CT3E/m_set_ready.md b/docs/include/stlab/concurrency/channel.hpp/receiver3CT3E/m_set_ready.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/receiver3CT3E/m_set_ready.md rename to docs/include/stlab/concurrency/channel.hpp/receiver3CT3E/m_set_ready.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/receiver3CT3E/m_swap.md b/docs/include/stlab/concurrency/channel.hpp/receiver3CT3E/m_swap.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/receiver3CT3E/m_swap.md rename to docs/include/stlab/concurrency/channel.hpp/receiver3CT3E/m_swap.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/receiver3CT3E/m_~receiver3CT3E.md b/docs/include/stlab/concurrency/channel.hpp/receiver3CT3E/m_~receiver3CT3E.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/receiver3CT3E/m_~receiver3CT3E.md rename to docs/include/stlab/concurrency/channel.hpp/receiver3CT3E/m_~receiver3CT3E.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/receiver3CT3E/operator_pipe_example.cpp b/docs/include/stlab/concurrency/channel.hpp/receiver3CT3E/operator_pipe_example.cpp similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/receiver3CT3E/operator_pipe_example.cpp rename to docs/include/stlab/concurrency/channel.hpp/receiver3CT3E/operator_pipe_example.cpp diff --git a/docs/includes/stlab/concurrency/channel.hpp/receiver3CT3E/set_ready_example.cpp b/docs/include/stlab/concurrency/channel.hpp/receiver3CT3E/set_ready_example.cpp similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/receiver3CT3E/set_ready_example.cpp rename to docs/include/stlab/concurrency/channel.hpp/receiver3CT3E/set_ready_example.cpp diff --git a/docs/includes/stlab/concurrency/channel.hpp/result_of_3CR2028Args293E/index.md b/docs/include/stlab/concurrency/channel.hpp/result_of_3CR2028Args293E/index.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/result_of_3CR2028Args293E/index.md rename to docs/include/stlab/concurrency/channel.hpp/result_of_3CR2028Args293E/index.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/round_robin_t/index.md b/docs/include/stlab/concurrency/channel.hpp/round_robin_t/index.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/round_robin_t/index.md rename to docs/include/stlab/concurrency/channel.hpp/round_robin_t/index.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/call_operator_example.cpp b/docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/call_operator_example.cpp similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/call_operator_example.cpp rename to docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/call_operator_example.cpp diff --git a/docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/close_example.cpp b/docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/close_example.cpp similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/close_example.cpp rename to docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/close_example.cpp diff --git a/docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/index.md b/docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/index.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/index.md rename to docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/index.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/m_close.md b/docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/m_close.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/m_close.md rename to docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/m_close.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/m_free_buffer.md b/docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/m_free_buffer.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/m_free_buffer.md rename to docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/m_free_buffer.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/m_operator2829.md b/docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/m_operator2829.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/m_operator2829.md rename to docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/m_operator2829.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/m_operator3D.md b/docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/m_operator3D.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/m_operator3D.md rename to docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/m_operator3D.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/m_sender3CT2C20typename20enable_if3C21smart_is_copy_constructible_v3CT3E2C20void3E3A3Atype3E.md b/docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/m_sender3CT2C20typename20enable_if3C21smart_is_copy_constructible_v3CT3E2C20void3E3A3Atype3E.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/m_sender3CT2C20typename20enable_if3C21smart_is_copy_constructible_v3CT3E2C20void3E3A3Atype3E.md rename to docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/m_sender3CT2C20typename20enable_if3C21smart_is_copy_constructible_v3CT3E2C20void3E3A3Atype3E.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/m_swap.md b/docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/m_swap.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/m_swap.md rename to docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/m_swap.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/m_~sender3CT2C20typename20enable_if3C21smart_is_copy_constructible_v3CT3E2C20void3E3A3Atype3E.md b/docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/m_~sender3CT2C20typename20enable_if3C21smart_is_copy_constructible_v3CT3E2C20void3E3A3Atype3E.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/m_~sender3CT2C20typename20enable_if3C21smart_is_copy_constructible_v3CT3E2C20void3E3A3Atype3E.md rename to docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.8709540a/m_~sender3CT2C20typename20enable_if3C21smart_is_copy_constructible_v3CT3E2C20void3E3A3Atype3E.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/call_operator_example.cpp b/docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/call_operator_example.cpp similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/call_operator_example.cpp rename to docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/call_operator_example.cpp diff --git a/docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/close_example.cpp b/docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/close_example.cpp similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/close_example.cpp rename to docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/close_example.cpp diff --git a/docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/index.md b/docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/index.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/index.md rename to docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/index.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/m_close.md b/docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/m_close.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/m_close.md rename to docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/m_close.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/m_free_buffer.md b/docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/m_free_buffer.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/m_free_buffer.md rename to docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/m_free_buffer.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/m_operator2829.md b/docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/m_operator2829.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/m_operator2829.md rename to docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/m_operator2829.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/m_operator3D.md b/docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/m_operator3D.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/m_operator3D.md rename to docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/m_operator3D.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/m_sender3CT2C20typename20enable_if3Csmart_is_copy_constructible_v3CT3E2C20void3E3A3Atype3E.md b/docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/m_sender3CT2C20typename20enable_if3Csmart_is_copy_constructible_v3CT3E2C20void3E3A3Atype3E.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/m_sender3CT2C20typename20enable_if3Csmart_is_copy_constructible_v3CT3E2C20void3E3A3Atype3E.md rename to docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/m_sender3CT2C20typename20enable_if3Csmart_is_copy_constructible_v3CT3E2C20void3E3A3Atype3E.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/m_swap.md b/docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/m_swap.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/m_swap.md rename to docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/m_swap.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/m_~sender3CT2C20typename20enable_if3Csmart_is_copy_constructible_v3CT3E2C20void3E3A3Atype3E.md b/docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/m_~sender3CT2C20typename20enable_if3Csmart_is_copy_constructible_v3CT3E2C20void3E3A3Atype3E.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/m_~sender3CT2C20typename20enable_if3Csmart_is_copy_constructible_v3CT3E2C20void3E3A3Atype3E.md rename to docs/include/stlab/concurrency/channel.hpp/sender3CT2C20enable_if_.a01d6424/m_~sender3CT2C20typename20enable_if3Csmart_is_copy_constructible_v3CT3E2C20void3E3A3Atype3E.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/stlab3A3Av33A3Achannel_error_codes.md b/docs/include/stlab/concurrency/channel.hpp/stlab3A3Av33A3Achannel_error_codes.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/stlab3A3Av33A3Achannel_error_codes.md rename to docs/include/stlab/concurrency/channel.hpp/stlab3A3Av33A3Achannel_error_codes.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/stlab3A3Av33A3Amessage_t.md b/docs/include/stlab/concurrency/channel.hpp/stlab3A3Av33A3Amessage_t.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/stlab3A3Av33A3Amessage_t.md rename to docs/include/stlab/concurrency/channel.hpp/stlab3A3Av33A3Amessage_t.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/stlab3A3Av33A3Aprocess_state.md b/docs/include/stlab/concurrency/channel.hpp/stlab3A3Av33A3Aprocess_state.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/stlab3A3Av33A3Aprocess_state.md rename to docs/include/stlab/concurrency/channel.hpp/stlab3A3Av33A3Aprocess_state.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/unordered_t/index.md b/docs/include/stlab/concurrency/channel.hpp/unordered_t/index.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/unordered_t/index.md rename to docs/include/stlab/concurrency/channel.hpp/unordered_t/index.md diff --git a/docs/includes/stlab/concurrency/channel.hpp/zip_example.cpp b/docs/include/stlab/concurrency/channel.hpp/zip_example.cpp similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/zip_example.cpp rename to docs/include/stlab/concurrency/channel.hpp/zip_example.cpp diff --git a/docs/includes/stlab/concurrency/channel.hpp/zip_with_example.cpp b/docs/include/stlab/concurrency/channel.hpp/zip_with_example.cpp similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/zip_with_example.cpp rename to docs/include/stlab/concurrency/channel.hpp/zip_with_example.cpp diff --git a/docs/includes/stlab/concurrency/channel.hpp/zip_with_t/index.md b/docs/include/stlab/concurrency/channel.hpp/zip_with_t/index.md similarity index 100% rename from docs/includes/stlab/concurrency/channel.hpp/zip_with_t/index.md rename to docs/include/stlab/concurrency/channel.hpp/zip_with_t/index.md diff --git a/docs/includes/stlab/concurrency/concurrency.hpp/index.md b/docs/include/stlab/concurrency/concurrency.hpp/index.md similarity index 100% rename from docs/includes/stlab/concurrency/concurrency.hpp/index.md rename to docs/include/stlab/concurrency/concurrency.hpp/index.md diff --git a/docs/includes/stlab/concurrency/default_executor.hpp/index.md b/docs/include/stlab/concurrency/default_executor.hpp/index.md similarity index 100% rename from docs/includes/stlab/concurrency/default_executor.hpp/index.md rename to docs/include/stlab/concurrency/default_executor.hpp/index.md diff --git a/docs/includes/stlab/concurrency/executor_base.hpp/executor/index.md b/docs/include/stlab/concurrency/executor_base.hpp/executor/index.md similarity index 100% rename from docs/includes/stlab/concurrency/executor_base.hpp/executor/index.md rename to docs/include/stlab/concurrency/executor_base.hpp/executor/index.md diff --git a/docs/includes/stlab/concurrency/executor_base.hpp/executor/m_executor.md b/docs/include/stlab/concurrency/executor_base.hpp/executor/m_executor.md similarity index 100% rename from docs/includes/stlab/concurrency/executor_base.hpp/executor/m_executor.md rename to docs/include/stlab/concurrency/executor_base.hpp/executor/m_executor.md diff --git a/docs/includes/stlab/concurrency/executor_base.hpp/executor/m_operator3D.md b/docs/include/stlab/concurrency/executor_base.hpp/executor/m_operator3D.md similarity index 100% rename from docs/includes/stlab/concurrency/executor_base.hpp/executor/m_operator3D.md rename to docs/include/stlab/concurrency/executor_base.hpp/executor/m_operator3D.md diff --git a/docs/includes/stlab/concurrency/executor_base.hpp/executor_task_pair3CF3E/index.md b/docs/include/stlab/concurrency/executor_base.hpp/executor_task_pair3CF3E/index.md similarity index 100% rename from docs/includes/stlab/concurrency/executor_base.hpp/executor_task_pair3CF3E/index.md rename to docs/include/stlab/concurrency/executor_base.hpp/executor_task_pair3CF3E/index.md diff --git a/docs/includes/stlab/concurrency/executor_base.hpp/f_execute_at.md b/docs/include/stlab/concurrency/executor_base.hpp/f_execute_at.md similarity index 100% rename from docs/includes/stlab/concurrency/executor_base.hpp/f_execute_at.md rename to docs/include/stlab/concurrency/executor_base.hpp/f_execute_at.md diff --git a/docs/includes/stlab/concurrency/executor_base.hpp/f_execute_delayed.md b/docs/include/stlab/concurrency/executor_base.hpp/f_execute_delayed.md similarity index 100% rename from docs/includes/stlab/concurrency/executor_base.hpp/f_execute_delayed.md rename to docs/include/stlab/concurrency/executor_base.hpp/f_execute_delayed.md diff --git a/docs/includes/stlab/concurrency/executor_base.hpp/f_operator26.md b/docs/include/stlab/concurrency/executor_base.hpp/f_operator26.md similarity index 100% rename from docs/includes/stlab/concurrency/executor_base.hpp/f_operator26.md rename to docs/include/stlab/concurrency/executor_base.hpp/f_operator26.md diff --git a/docs/includes/stlab/concurrency/executor_base.hpp/index.md b/docs/include/stlab/concurrency/executor_base.hpp/index.md similarity index 100% rename from docs/includes/stlab/concurrency/executor_base.hpp/index.md rename to docs/include/stlab/concurrency/executor_base.hpp/index.md diff --git a/docs/includes/stlab/concurrency/future.hpp/async_example.cpp b/docs/include/stlab/concurrency/future.hpp/async_example.cpp similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/async_example.cpp rename to docs/include/stlab/concurrency/future.hpp/async_example.cpp diff --git a/docs/includes/stlab/concurrency/future.hpp/f_async.md b/docs/include/stlab/concurrency/future.hpp/f_async.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/f_async.md rename to docs/include/stlab/concurrency/future.hpp/f_async.md diff --git a/docs/includes/stlab/concurrency/future.hpp/f_invoke_remove_monostate_arguments.md b/docs/include/stlab/concurrency/future.hpp/f_invoke_remove_monostate_arguments.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/f_invoke_remove_monostate_arguments.md rename to docs/include/stlab/concurrency/future.hpp/f_invoke_remove_monostate_arguments.md diff --git a/docs/includes/stlab/concurrency/future.hpp/f_invoke_void_to_monostate_result.md b/docs/include/stlab/concurrency/future.hpp/f_invoke_void_to_monostate_result.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/f_invoke_void_to_monostate_result.md rename to docs/include/stlab/concurrency/future.hpp/f_invoke_void_to_monostate_result.md diff --git a/docs/includes/stlab/concurrency/future.hpp/f_monostate_to_empty_tuple.md b/docs/include/stlab/concurrency/future.hpp/f_monostate_to_empty_tuple.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/f_monostate_to_empty_tuple.md rename to docs/include/stlab/concurrency/future.hpp/f_monostate_to_empty_tuple.md diff --git a/docs/includes/stlab/concurrency/future.hpp/f_monostate_to_void.md b/docs/include/stlab/concurrency/future.hpp/f_monostate_to_void.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/f_monostate_to_void.md rename to docs/include/stlab/concurrency/future.hpp/f_monostate_to_void.md diff --git a/docs/includes/stlab/concurrency/future.hpp/f_optional_monostate_to_bool.md b/docs/include/stlab/concurrency/future.hpp/f_optional_monostate_to_bool.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/f_optional_monostate_to_bool.md rename to docs/include/stlab/concurrency/future.hpp/f_optional_monostate_to_bool.md diff --git a/docs/includes/stlab/concurrency/future.hpp/f_when_all.md b/docs/include/stlab/concurrency/future.hpp/f_when_all.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/f_when_all.md rename to docs/include/stlab/concurrency/future.hpp/f_when_all.md diff --git a/docs/includes/stlab/concurrency/future.hpp/f_when_any.md b/docs/include/stlab/concurrency/future.hpp/f_when_any.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/f_when_any.md rename to docs/include/stlab/concurrency/future.hpp/f_when_any.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future/f_operator213D.md b/docs/include/stlab/concurrency/future.hpp/future/f_operator213D.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future/f_operator213D.md rename to docs/include/stlab/concurrency/future.hpp/future/f_operator213D.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future/f_operator3D3D.md b/docs/include/stlab/concurrency/future.hpp/future/f_operator3D3D.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future/f_operator3D3D.md rename to docs/include/stlab/concurrency/future.hpp/future/f_operator3D3D.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future/f_swap.md b/docs/include/stlab/concurrency/future.hpp/future/f_swap.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future/f_swap.md rename to docs/include/stlab/concurrency/future.hpp/future/f_swap.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/index.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/index.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/index.md rename to docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/index.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_detach.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_detach.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_detach.md rename to docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_detach.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_error.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_error.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_error.md rename to docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_error.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_exception.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_exception.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_exception.md rename to docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_exception.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_future3CT2C20typename20enable_if3Csmart_is_copy_constructible_v3Ctypename20void_to_monostate3CT3E3A3Atype3E2C20void3E3A3Atype3E.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_future3CT2C20typename20enable_if3Csmart_is_copy_constructible_v3Ctypename20void_to_monostate3CT3E3A3Atype3E2C20void3E3A3Atype3E.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_future3CT2C20typename20enable_if3Csmart_is_copy_constructible_v3Ctypename20void_to_monostate3CT3E3A3Atype3E2C20void3E3A3Atype3E.md rename to docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_future3CT2C20typename20enable_if3Csmart_is_copy_constructible_v3Ctypename20void_to_monostate3CT3E3A3Atype3E2C20void3E3A3Atype3E.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_get_ready.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_get_ready.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_get_ready.md rename to docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_get_ready.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_get_try.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_get_try.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_get_try.md rename to docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_get_try.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_is_ready.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_is_ready.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_is_ready.md rename to docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_is_ready.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_operator5E.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_operator5E.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_operator5E.md rename to docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_operator5E.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_operator7C.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_operator7C.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_operator7C.md rename to docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_operator7C.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_recover.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_recover.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_recover.md rename to docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_recover.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_reset.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_reset.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_reset.md rename to docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_reset.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_swap.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_swap.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_swap.md rename to docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_swap.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_then.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_then.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_then.md rename to docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_then.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_valid.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_valid.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_valid.md rename to docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_valid.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/index.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/index.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/index.md rename to docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/index.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_detach.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_detach.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_detach.md rename to docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_detach.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_error.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_error.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_error.md rename to docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_error.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_exception.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_exception.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_exception.md rename to docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_exception.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_future3CT2C20typename20enable_if3C21smart_is_copy_constructible_v3Ctypename20void_to_monostate3CT3E3A3Atype3E2C20void3E3A3Atype3E.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_future3CT2C20typename20enable_if3C21smart_is_copy_constructible_v3Ctypename20void_to_monostate3CT3E3A3Atype3E2C20void3E3A3Atype3E.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_future3CT2C20typename20enable_if3C21smart_is_copy_constructible_v3Ctypename20void_to_monostate3CT3E3A3Atype3E2C20void3E3A3Atype3E.md rename to docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_future3CT2C20typename20enable_if3C21smart_is_copy_constructible_v3Ctypename20void_to_monostate3CT3E3A3Atype3E2C20void3E3A3Atype3E.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_get_ready.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_get_ready.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_get_ready.md rename to docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_get_ready.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_get_try.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_get_try.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_get_try.md rename to docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_get_try.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_is_ready.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_is_ready.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_is_ready.md rename to docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_is_ready.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_operator3D.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_operator3D.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_operator3D.md rename to docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_operator3D.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_operator5E.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_operator5E.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_operator5E.md rename to docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_operator5E.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_operator7C.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_operator7C.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_operator7C.md rename to docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_operator7C.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_recover.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_recover.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_recover.md rename to docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_recover.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_reset.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_reset.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_reset.md rename to docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_reset.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_swap.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_swap.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_swap.md rename to docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_swap.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_then.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_then.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_then.md rename to docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_then.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_valid.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_valid.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_valid.md rename to docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_valid.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future_error/index.md b/docs/include/stlab/concurrency/future.hpp/future_error/index.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future_error/index.md rename to docs/include/stlab/concurrency/future.hpp/future_error/index.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future_error/m_code.md b/docs/include/stlab/concurrency/future.hpp/future_error/m_code.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future_error/m_code.md rename to docs/include/stlab/concurrency/future.hpp/future_error/m_code.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future_error/m_future_error.md b/docs/include/stlab/concurrency/future.hpp/future_error/m_future_error.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future_error/m_future_error.md rename to docs/include/stlab/concurrency/future.hpp/future_error/m_future_error.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future_error/m_operator3D.md b/docs/include/stlab/concurrency/future.hpp/future_error/m_operator3D.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future_error/m_operator3D.md rename to docs/include/stlab/concurrency/future.hpp/future_error/m_operator3D.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future_error/m_what.md b/docs/include/stlab/concurrency/future.hpp/future_error/m_what.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future_error/m_what.md rename to docs/include/stlab/concurrency/future.hpp/future_error/m_what.md diff --git a/docs/includes/stlab/concurrency/future.hpp/future_error/m_~future_error.md b/docs/include/stlab/concurrency/future.hpp/future_error/m_~future_error.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/future_error/m_~future_error.md rename to docs/include/stlab/concurrency/future.hpp/future_error/m_~future_error.md diff --git a/docs/includes/stlab/concurrency/future.hpp/index.md b/docs/include/stlab/concurrency/future.hpp/index.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/index.md rename to docs/include/stlab/concurrency/future.hpp/index.md diff --git a/docs/includes/stlab/concurrency/future.hpp/make_when_any3CT3E/index.md b/docs/include/stlab/concurrency/future.hpp/make_when_any3CT3E/index.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/make_when_any3CT3E/index.md rename to docs/include/stlab/concurrency/future.hpp/make_when_any3CT3E/index.md diff --git a/docs/includes/stlab/concurrency/future.hpp/make_when_any3CT3E/m_make.md b/docs/include/stlab/concurrency/future.hpp/make_when_any3CT3E/m_make.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/make_when_any3CT3E/m_make.md rename to docs/include/stlab/concurrency/future.hpp/make_when_any3CT3E/m_make.md diff --git a/docs/includes/stlab/concurrency/future.hpp/make_when_any3Cvoid3E/index.md b/docs/include/stlab/concurrency/future.hpp/make_when_any3Cvoid3E/index.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/make_when_any3Cvoid3E/index.md rename to docs/include/stlab/concurrency/future.hpp/make_when_any3Cvoid3E/index.md diff --git a/docs/includes/stlab/concurrency/future.hpp/make_when_any3Cvoid3E/m_make.md b/docs/include/stlab/concurrency/future.hpp/make_when_any3Cvoid3E/m_make.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/make_when_any3Cvoid3E/m_make.md rename to docs/include/stlab/concurrency/future.hpp/make_when_any3Cvoid3E/m_make.md diff --git a/docs/includes/stlab/concurrency/future.hpp/packaged_task/f_future_with_broken_promise.md b/docs/include/stlab/concurrency/future.hpp/packaged_task/f_future_with_broken_promise.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/packaged_task/f_future_with_broken_promise.md rename to docs/include/stlab/concurrency/future.hpp/packaged_task/f_future_with_broken_promise.md diff --git a/docs/includes/stlab/concurrency/future.hpp/packaged_task/f_package.md b/docs/include/stlab/concurrency/future.hpp/packaged_task/f_package.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/packaged_task/f_package.md rename to docs/include/stlab/concurrency/future.hpp/packaged_task/f_package.md diff --git a/docs/includes/stlab/concurrency/future.hpp/packaged_task/package_example.cpp b/docs/include/stlab/concurrency/future.hpp/packaged_task/package_example.cpp similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/packaged_task/package_example.cpp rename to docs/include/stlab/concurrency/future.hpp/packaged_task/package_example.cpp diff --git a/docs/includes/stlab/concurrency/future.hpp/packaged_task3CArgs3E/index.md b/docs/include/stlab/concurrency/future.hpp/packaged_task3CArgs3E/index.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/packaged_task3CArgs3E/index.md rename to docs/include/stlab/concurrency/future.hpp/packaged_task3CArgs3E/index.md diff --git a/docs/includes/stlab/concurrency/future.hpp/packaged_task3CArgs3E/m_canceled.md b/docs/include/stlab/concurrency/future.hpp/packaged_task3CArgs3E/m_canceled.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/packaged_task3CArgs3E/m_canceled.md rename to docs/include/stlab/concurrency/future.hpp/packaged_task3CArgs3E/m_canceled.md diff --git a/docs/includes/stlab/concurrency/future.hpp/packaged_task3CArgs3E/m_operator2829.md b/docs/include/stlab/concurrency/future.hpp/packaged_task3CArgs3E/m_operator2829.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/packaged_task3CArgs3E/m_operator2829.md rename to docs/include/stlab/concurrency/future.hpp/packaged_task3CArgs3E/m_operator2829.md diff --git a/docs/includes/stlab/concurrency/future.hpp/packaged_task3CArgs3E/m_operator3D.md b/docs/include/stlab/concurrency/future.hpp/packaged_task3CArgs3E/m_operator3D.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/packaged_task3CArgs3E/m_operator3D.md rename to docs/include/stlab/concurrency/future.hpp/packaged_task3CArgs3E/m_operator3D.md diff --git a/docs/includes/stlab/concurrency/future.hpp/packaged_task3CArgs3E/m_packaged_task3CArgs3E.md b/docs/include/stlab/concurrency/future.hpp/packaged_task3CArgs3E/m_packaged_task3CArgs3E.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/packaged_task3CArgs3E/m_packaged_task3CArgs3E.md rename to docs/include/stlab/concurrency/future.hpp/packaged_task3CArgs3E/m_packaged_task3CArgs3E.md diff --git a/docs/includes/stlab/concurrency/future.hpp/packaged_task3CArgs3E/m_set_exception.md b/docs/include/stlab/concurrency/future.hpp/packaged_task3CArgs3E/m_set_exception.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/packaged_task3CArgs3E/m_set_exception.md rename to docs/include/stlab/concurrency/future.hpp/packaged_task3CArgs3E/m_set_exception.md diff --git a/docs/includes/stlab/concurrency/future.hpp/packaged_task3CArgs3E/m_~packaged_task3CArgs3E.md b/docs/include/stlab/concurrency/future.hpp/packaged_task3CArgs3E/m_~packaged_task3CArgs3E.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/packaged_task3CArgs3E/m_~packaged_task3CArgs3E.md rename to docs/include/stlab/concurrency/future.hpp/packaged_task3CArgs3E/m_~packaged_task3CArgs3E.md diff --git a/docs/includes/stlab/concurrency/future.hpp/stlab3A3Av33A3Afuture_error_codes.md b/docs/include/stlab/concurrency/future.hpp/stlab3A3Av33A3Afuture_error_codes.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/stlab3A3Av33A3Afuture_error_codes.md rename to docs/include/stlab/concurrency/future.hpp/stlab3A3Av33A3Afuture_error_codes.md diff --git a/docs/includes/stlab/concurrency/future.hpp/void_to_monostate3CT3E/index.md b/docs/include/stlab/concurrency/future.hpp/void_to_monostate3CT3E/index.md similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/void_to_monostate3CT3E/index.md rename to docs/include/stlab/concurrency/future.hpp/void_to_monostate3CT3E/index.md diff --git a/docs/includes/stlab/concurrency/future.hpp/when_all_example.cpp b/docs/include/stlab/concurrency/future.hpp/when_all_example.cpp similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/when_all_example.cpp rename to docs/include/stlab/concurrency/future.hpp/when_all_example.cpp diff --git a/docs/includes/stlab/concurrency/future.hpp/when_all_void_example.cpp b/docs/include/stlab/concurrency/future.hpp/when_all_void_example.cpp similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/when_all_void_example.cpp rename to docs/include/stlab/concurrency/future.hpp/when_all_void_example.cpp diff --git a/docs/includes/stlab/concurrency/future.hpp/when_any_example.cpp b/docs/include/stlab/concurrency/future.hpp/when_any_example.cpp similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/when_any_example.cpp rename to docs/include/stlab/concurrency/future.hpp/when_any_example.cpp diff --git a/docs/includes/stlab/concurrency/future.hpp/when_any_void_example.cpp b/docs/include/stlab/concurrency/future.hpp/when_any_void_example.cpp similarity index 100% rename from docs/includes/stlab/concurrency/future.hpp/when_any_void_example.cpp rename to docs/include/stlab/concurrency/future.hpp/when_any_void_example.cpp diff --git a/docs/includes/stlab/concurrency/immediate_executor.hpp/index.md b/docs/include/stlab/concurrency/immediate_executor.hpp/index.md similarity index 100% rename from docs/includes/stlab/concurrency/immediate_executor.hpp/index.md rename to docs/include/stlab/concurrency/immediate_executor.hpp/index.md diff --git a/docs/includes/stlab/concurrency/index.md b/docs/include/stlab/concurrency/index.md similarity index 100% rename from docs/includes/stlab/concurrency/index.md rename to docs/include/stlab/concurrency/index.md diff --git a/docs/includes/stlab/concurrency/main_executor.hpp/index.md b/docs/include/stlab/concurrency/main_executor.hpp/index.md similarity index 100% rename from docs/includes/stlab/concurrency/main_executor.hpp/index.md rename to docs/include/stlab/concurrency/main_executor.hpp/index.md diff --git a/docs/includes/stlab/concurrency/progress.hpp/index.md b/docs/include/stlab/concurrency/progress.hpp/index.md similarity index 100% rename from docs/includes/stlab/concurrency/progress.hpp/index.md rename to docs/include/stlab/concurrency/progress.hpp/index.md diff --git a/docs/includes/stlab/concurrency/progress.hpp/progress_tracker/index.md b/docs/include/stlab/concurrency/progress.hpp/progress_tracker/index.md similarity index 100% rename from docs/includes/stlab/concurrency/progress.hpp/progress_tracker/index.md rename to docs/include/stlab/concurrency/progress.hpp/progress_tracker/index.md diff --git a/docs/includes/stlab/concurrency/progress.hpp/progress_tracker/m_completed.md b/docs/include/stlab/concurrency/progress.hpp/progress_tracker/m_completed.md similarity index 100% rename from docs/includes/stlab/concurrency/progress.hpp/progress_tracker/m_completed.md rename to docs/include/stlab/concurrency/progress.hpp/progress_tracker/m_completed.md diff --git a/docs/includes/stlab/concurrency/progress.hpp/progress_tracker/m_operator2829.md b/docs/include/stlab/concurrency/progress.hpp/progress_tracker/m_operator2829.md similarity index 100% rename from docs/includes/stlab/concurrency/progress.hpp/progress_tracker/m_operator2829.md rename to docs/include/stlab/concurrency/progress.hpp/progress_tracker/m_operator2829.md diff --git a/docs/includes/stlab/concurrency/progress.hpp/progress_tracker/m_operator3D.md b/docs/include/stlab/concurrency/progress.hpp/progress_tracker/m_operator3D.md similarity index 100% rename from docs/includes/stlab/concurrency/progress.hpp/progress_tracker/m_operator3D.md rename to docs/include/stlab/concurrency/progress.hpp/progress_tracker/m_operator3D.md diff --git a/docs/includes/stlab/concurrency/progress.hpp/progress_tracker/m_progress_tracker.md b/docs/include/stlab/concurrency/progress.hpp/progress_tracker/m_progress_tracker.md similarity index 100% rename from docs/includes/stlab/concurrency/progress.hpp/progress_tracker/m_progress_tracker.md rename to docs/include/stlab/concurrency/progress.hpp/progress_tracker/m_progress_tracker.md diff --git a/docs/includes/stlab/concurrency/progress.hpp/progress_tracker/m_steps.md b/docs/include/stlab/concurrency/progress.hpp/progress_tracker/m_steps.md similarity index 100% rename from docs/includes/stlab/concurrency/progress.hpp/progress_tracker/m_steps.md rename to docs/include/stlab/concurrency/progress.hpp/progress_tracker/m_steps.md diff --git a/docs/includes/stlab/concurrency/ready_future.hpp/f_make_exceptional_future.md b/docs/include/stlab/concurrency/ready_future.hpp/f_make_exceptional_future.md similarity index 100% rename from docs/includes/stlab/concurrency/ready_future.hpp/f_make_exceptional_future.md rename to docs/include/stlab/concurrency/ready_future.hpp/f_make_exceptional_future.md diff --git a/docs/includes/stlab/concurrency/ready_future.hpp/f_make_ready_future.md b/docs/include/stlab/concurrency/ready_future.hpp/f_make_ready_future.md similarity index 100% rename from docs/includes/stlab/concurrency/ready_future.hpp/f_make_ready_future.md rename to docs/include/stlab/concurrency/ready_future.hpp/f_make_ready_future.md diff --git a/docs/includes/stlab/concurrency/ready_future.hpp/index.md b/docs/include/stlab/concurrency/ready_future.hpp/index.md similarity index 100% rename from docs/includes/stlab/concurrency/ready_future.hpp/index.md rename to docs/include/stlab/concurrency/ready_future.hpp/index.md diff --git a/docs/includes/stlab/concurrency/serial_queue.hpp/index.md b/docs/include/stlab/concurrency/serial_queue.hpp/index.md similarity index 100% rename from docs/includes/stlab/concurrency/serial_queue.hpp/index.md rename to docs/include/stlab/concurrency/serial_queue.hpp/index.md diff --git a/docs/includes/stlab/concurrency/serial_queue.hpp/serial_queue_t/index.md b/docs/include/stlab/concurrency/serial_queue.hpp/serial_queue_t/index.md similarity index 100% rename from docs/includes/stlab/concurrency/serial_queue.hpp/serial_queue_t/index.md rename to docs/include/stlab/concurrency/serial_queue.hpp/serial_queue_t/index.md diff --git a/docs/includes/stlab/concurrency/serial_queue.hpp/serial_queue_t/m_executor.md b/docs/include/stlab/concurrency/serial_queue.hpp/serial_queue_t/m_executor.md similarity index 100% rename from docs/includes/stlab/concurrency/serial_queue.hpp/serial_queue_t/m_executor.md rename to docs/include/stlab/concurrency/serial_queue.hpp/serial_queue_t/m_executor.md diff --git a/docs/includes/stlab/concurrency/serial_queue.hpp/serial_queue_t/m_operator2829.md b/docs/include/stlab/concurrency/serial_queue.hpp/serial_queue_t/m_operator2829.md similarity index 100% rename from docs/includes/stlab/concurrency/serial_queue.hpp/serial_queue_t/m_operator2829.md rename to docs/include/stlab/concurrency/serial_queue.hpp/serial_queue_t/m_operator2829.md diff --git a/docs/includes/stlab/concurrency/serial_queue.hpp/serial_queue_t/m_operator3D.md b/docs/include/stlab/concurrency/serial_queue.hpp/serial_queue_t/m_operator3D.md similarity index 100% rename from docs/includes/stlab/concurrency/serial_queue.hpp/serial_queue_t/m_operator3D.md rename to docs/include/stlab/concurrency/serial_queue.hpp/serial_queue_t/m_operator3D.md diff --git a/docs/includes/stlab/concurrency/serial_queue.hpp/serial_queue_t/m_serial_queue_t.md b/docs/include/stlab/concurrency/serial_queue.hpp/serial_queue_t/m_serial_queue_t.md similarity index 100% rename from docs/includes/stlab/concurrency/serial_queue.hpp/serial_queue_t/m_serial_queue_t.md rename to docs/include/stlab/concurrency/serial_queue.hpp/serial_queue_t/m_serial_queue_t.md diff --git a/docs/includes/stlab/concurrency/serial_queue.hpp/serial_queue_t/serial_queue_example.cpp b/docs/include/stlab/concurrency/serial_queue.hpp/serial_queue_t/serial_queue_example.cpp similarity index 100% rename from docs/includes/stlab/concurrency/serial_queue.hpp/serial_queue_t/serial_queue_example.cpp rename to docs/include/stlab/concurrency/serial_queue.hpp/serial_queue_t/serial_queue_example.cpp diff --git a/docs/includes/stlab/concurrency/serial_queue.hpp/stlab3A3Av33A3Aschedule_mode.md b/docs/include/stlab/concurrency/serial_queue.hpp/stlab3A3Av33A3Aschedule_mode.md similarity index 100% rename from docs/includes/stlab/concurrency/serial_queue.hpp/stlab3A3Av33A3Aschedule_mode.md rename to docs/include/stlab/concurrency/serial_queue.hpp/stlab3A3Av33A3Aschedule_mode.md diff --git a/docs/includes/stlab/concurrency/set_current_thread_name.hpp/f_set_current_thread_name.md b/docs/include/stlab/concurrency/set_current_thread_name.hpp/f_set_current_thread_name.md similarity index 100% rename from docs/includes/stlab/concurrency/set_current_thread_name.hpp/f_set_current_thread_name.md rename to docs/include/stlab/concurrency/set_current_thread_name.hpp/f_set_current_thread_name.md diff --git a/docs/includes/stlab/concurrency/set_current_thread_name.hpp/index.md b/docs/include/stlab/concurrency/set_current_thread_name.hpp/index.md similarity index 100% rename from docs/includes/stlab/concurrency/set_current_thread_name.hpp/index.md rename to docs/include/stlab/concurrency/set_current_thread_name.hpp/index.md diff --git a/docs/includes/stlab/concurrency/system_timer.hpp/index.md b/docs/include/stlab/concurrency/system_timer.hpp/index.md similarity index 100% rename from docs/includes/stlab/concurrency/system_timer.hpp/index.md rename to docs/include/stlab/concurrency/system_timer.hpp/index.md diff --git a/docs/includes/stlab/concurrency/task.hpp/index.md b/docs/include/stlab/concurrency/task.hpp/index.md similarity index 100% rename from docs/includes/stlab/concurrency/task.hpp/index.md rename to docs/include/stlab/concurrency/task.hpp/index.md diff --git a/docs/includes/stlab/concurrency/task.hpp/noexcept_deducer3CT2C20.26423853/index.md b/docs/include/stlab/concurrency/task.hpp/noexcept_deducer3CT2C20.26423853/index.md similarity index 100% rename from docs/includes/stlab/concurrency/task.hpp/noexcept_deducer3CT2C20.26423853/index.md rename to docs/include/stlab/concurrency/task.hpp/noexcept_deducer3CT2C20.26423853/index.md diff --git a/docs/includes/stlab/concurrency/task.hpp/noexcept_deducer3CT2C20.5812342b/index.md b/docs/include/stlab/concurrency/task.hpp/noexcept_deducer3CT2C20.5812342b/index.md similarity index 100% rename from docs/includes/stlab/concurrency/task.hpp/noexcept_deducer3CT2C20.5812342b/index.md rename to docs/include/stlab/concurrency/task.hpp/noexcept_deducer3CT2C20.5812342b/index.md diff --git a/docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/f_operator213D.md b/docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/f_operator213D.md similarity index 100% rename from docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/f_operator213D.md rename to docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/f_operator213D.md diff --git a/docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/f_operator3D3D.md b/docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/f_operator3D3D.md similarity index 100% rename from docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/f_operator3D3D.md rename to docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/f_operator3D3D.md diff --git a/docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/f_swap.md b/docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/f_swap.md similarity index 100% rename from docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/f_swap.md rename to docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/f_swap.md diff --git a/docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/index.md b/docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/index.md similarity index 100% rename from docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/index.md rename to docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/index.md diff --git a/docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_operator20bool.md b/docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_operator20bool.md similarity index 100% rename from docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_operator20bool.md rename to docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_operator20bool.md diff --git a/docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_operator2829.md b/docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_operator2829.md similarity index 100% rename from docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_operator2829.md rename to docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_operator2829.md diff --git a/docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_operator3D.md b/docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_operator3D.md similarity index 100% rename from docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_operator3D.md rename to docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_operator3D.md diff --git a/docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_swap.md b/docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_swap.md similarity index 100% rename from docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_swap.md rename to docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_swap.md diff --git a/docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_target.md b/docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_target.md similarity index 100% rename from docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_target.md rename to docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_target.md diff --git a/docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_target_type.md b/docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_target_type.md similarity index 100% rename from docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_target_type.md rename to docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_target_type.md diff --git a/docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_task_3CNoExcept2C20R2C20Args3E.md b/docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_task_3CNoExcept2C20R2C20Args3E.md similarity index 100% rename from docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_task_3CNoExcept2C20R2C20Args3E.md rename to docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_task_3CNoExcept2C20R2C20Args3E.md diff --git a/docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_~task_3CNoExcept2C20R2C20Args3E.md b/docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_~task_3CNoExcept2C20R2C20Args3E.md similarity index 100% rename from docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_~task_3CNoExcept2C20R2C20Args3E.md rename to docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/m_~task_3CNoExcept2C20R2C20Args3E.md diff --git a/docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/index.md b/docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/index.md similarity index 100% rename from docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/index.md rename to docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/index.md diff --git a/docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/m_const_pointer.md b/docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/m_const_pointer.md similarity index 100% rename from docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/m_const_pointer.md rename to docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/m_const_pointer.md diff --git a/docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/m_dtor.md b/docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/m_dtor.md similarity index 100% rename from docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/m_dtor.md rename to docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/m_dtor.md diff --git a/docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/m_invoke.md b/docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/m_invoke.md similarity index 100% rename from docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/m_invoke.md rename to docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/m_invoke.md diff --git a/docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/m_model3CF2C20false3E.md b/docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/m_model3CF2C20false3E.md similarity index 100% rename from docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/m_model3CF2C20false3E.md rename to docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/m_model3CF2C20false3E.md diff --git a/docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/m_move_ctor.md b/docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/m_move_ctor.md similarity index 100% rename from docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/m_move_ctor.md rename to docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/m_move_ctor.md diff --git a/docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/m_pointer.md b/docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/m_pointer.md similarity index 100% rename from docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/m_pointer.md rename to docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/m_pointer.md diff --git a/docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/m_target_type.md b/docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/m_target_type.md similarity index 100% rename from docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/m_target_type.md rename to docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20false3E/m_target_type.md diff --git a/docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/index.md b/docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/index.md similarity index 100% rename from docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/index.md rename to docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/index.md diff --git a/docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_const_pointer.md b/docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_const_pointer.md similarity index 100% rename from docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_const_pointer.md rename to docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_const_pointer.md diff --git a/docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_dtor.md b/docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_dtor.md similarity index 100% rename from docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_dtor.md rename to docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_dtor.md diff --git a/docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_invoke.md b/docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_invoke.md similarity index 100% rename from docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_invoke.md rename to docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_invoke.md diff --git a/docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_model3CF2C20true3E.md b/docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_model3CF2C20true3E.md similarity index 100% rename from docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_model3CF2C20true3E.md rename to docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_model3CF2C20true3E.md diff --git a/docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_move_ctor.md b/docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_move_ctor.md similarity index 100% rename from docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_move_ctor.md rename to docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_move_ctor.md diff --git a/docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_pointer.md b/docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_pointer.md similarity index 100% rename from docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_pointer.md rename to docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_pointer.md diff --git a/docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_target_type.md b/docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_target_type.md similarity index 100% rename from docs/includes/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_target_type.md rename to docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_target_type.md diff --git a/docs/includes/stlab/concurrency/traits.hpp/detector3CDefault2C202C.c8fba2e1/index.md b/docs/include/stlab/concurrency/traits.hpp/detector3CDefault2C202C.c8fba2e1/index.md similarity index 100% rename from docs/includes/stlab/concurrency/traits.hpp/detector3CDefault2C202C.c8fba2e1/index.md rename to docs/include/stlab/concurrency/traits.hpp/detector3CDefault2C202C.c8fba2e1/index.md diff --git a/docs/includes/stlab/concurrency/traits.hpp/detector3CDefault2C20vo.a25dd5ae/index.md b/docs/include/stlab/concurrency/traits.hpp/detector3CDefault2C20vo.a25dd5ae/index.md similarity index 100% rename from docs/includes/stlab/concurrency/traits.hpp/detector3CDefault2C20vo.a25dd5ae/index.md rename to docs/include/stlab/concurrency/traits.hpp/detector3CDefault2C20vo.a25dd5ae/index.md diff --git a/docs/includes/stlab/concurrency/traits.hpp/index.md b/docs/include/stlab/concurrency/traits.hpp/index.md similarity index 100% rename from docs/includes/stlab/concurrency/traits.hpp/index.md rename to docs/include/stlab/concurrency/traits.hpp/index.md diff --git a/docs/includes/stlab/concurrency/traits.hpp/nonesuch/index.md b/docs/include/stlab/concurrency/traits.hpp/nonesuch/index.md similarity index 100% rename from docs/includes/stlab/concurrency/traits.hpp/nonesuch/index.md rename to docs/include/stlab/concurrency/traits.hpp/nonesuch/index.md diff --git a/docs/includes/stlab/concurrency/traits.hpp/nonesuch/m_nonesuch.md b/docs/include/stlab/concurrency/traits.hpp/nonesuch/m_nonesuch.md similarity index 100% rename from docs/includes/stlab/concurrency/traits.hpp/nonesuch/m_nonesuch.md rename to docs/include/stlab/concurrency/traits.hpp/nonesuch/m_nonesuch.md diff --git a/docs/includes/stlab/concurrency/traits.hpp/nonesuch/m_operator3D.md b/docs/include/stlab/concurrency/traits.hpp/nonesuch/m_operator3D.md similarity index 100% rename from docs/includes/stlab/concurrency/traits.hpp/nonesuch/m_operator3D.md rename to docs/include/stlab/concurrency/traits.hpp/nonesuch/m_operator3D.md diff --git a/docs/includes/stlab/concurrency/traits.hpp/nonesuch/m_~nonesuch.md b/docs/include/stlab/concurrency/traits.hpp/nonesuch/m_~nonesuch.md similarity index 100% rename from docs/includes/stlab/concurrency/traits.hpp/nonesuch/m_~nonesuch.md rename to docs/include/stlab/concurrency/traits.hpp/nonesuch/m_~nonesuch.md diff --git a/docs/includes/stlab/concurrency/traits.hpp/smart_test3Ctest2C20T3E/index.md b/docs/include/stlab/concurrency/traits.hpp/smart_test3Ctest2C20T3E/index.md similarity index 100% rename from docs/includes/stlab/concurrency/traits.hpp/smart_test3Ctest2C20T3E/index.md rename to docs/include/stlab/concurrency/traits.hpp/smart_test3Ctest2C20T3E/index.md diff --git a/docs/includes/stlab/concurrency/tuple_algorithm.hpp/f_apply_ignore_placeholders.md b/docs/include/stlab/concurrency/tuple_algorithm.hpp/f_apply_ignore_placeholders.md similarity index 100% rename from docs/includes/stlab/concurrency/tuple_algorithm.hpp/f_apply_ignore_placeholders.md rename to docs/include/stlab/concurrency/tuple_algorithm.hpp/f_apply_ignore_placeholders.md diff --git a/docs/includes/stlab/concurrency/tuple_algorithm.hpp/f_apply_indexed.md b/docs/include/stlab/concurrency/tuple_algorithm.hpp/f_apply_indexed.md similarity index 100% rename from docs/includes/stlab/concurrency/tuple_algorithm.hpp/f_apply_indexed.md rename to docs/include/stlab/concurrency/tuple_algorithm.hpp/f_apply_indexed.md diff --git a/docs/includes/stlab/concurrency/tuple_algorithm.hpp/f_get_i.md b/docs/include/stlab/concurrency/tuple_algorithm.hpp/f_get_i.md similarity index 100% rename from docs/includes/stlab/concurrency/tuple_algorithm.hpp/f_get_i.md rename to docs/include/stlab/concurrency/tuple_algorithm.hpp/f_get_i.md diff --git a/docs/includes/stlab/concurrency/tuple_algorithm.hpp/f_tuple_find.md b/docs/include/stlab/concurrency/tuple_algorithm.hpp/f_tuple_find.md similarity index 100% rename from docs/includes/stlab/concurrency/tuple_algorithm.hpp/f_tuple_find.md rename to docs/include/stlab/concurrency/tuple_algorithm.hpp/f_tuple_find.md diff --git a/docs/includes/stlab/concurrency/tuple_algorithm.hpp/f_tuple_for_each.md b/docs/include/stlab/concurrency/tuple_algorithm.hpp/f_tuple_for_each.md similarity index 100% rename from docs/includes/stlab/concurrency/tuple_algorithm.hpp/f_tuple_for_each.md rename to docs/include/stlab/concurrency/tuple_algorithm.hpp/f_tuple_for_each.md diff --git a/docs/includes/stlab/concurrency/tuple_algorithm.hpp/f_void_i.md b/docs/include/stlab/concurrency/tuple_algorithm.hpp/f_void_i.md similarity index 100% rename from docs/includes/stlab/concurrency/tuple_algorithm.hpp/f_void_i.md rename to docs/include/stlab/concurrency/tuple_algorithm.hpp/f_void_i.md diff --git a/docs/includes/stlab/concurrency/tuple_algorithm.hpp/index.md b/docs/include/stlab/concurrency/tuple_algorithm.hpp/index.md similarity index 100% rename from docs/includes/stlab/concurrency/tuple_algorithm.hpp/index.md rename to docs/include/stlab/concurrency/tuple_algorithm.hpp/index.md diff --git a/docs/includes/stlab/concurrency/tuple_algorithm.hpp/placeholder/index.md b/docs/include/stlab/concurrency/tuple_algorithm.hpp/placeholder/index.md similarity index 100% rename from docs/includes/stlab/concurrency/tuple_algorithm.hpp/placeholder/index.md rename to docs/include/stlab/concurrency/tuple_algorithm.hpp/placeholder/index.md diff --git a/docs/includes/stlab/concurrency/tuple_algorithm.hpp/remove_placeholder3CTuple3E/function3CIndex3E/index.md b/docs/include/stlab/concurrency/tuple_algorithm.hpp/remove_placeholder3CTuple3E/function3CIndex3E/index.md similarity index 100% rename from docs/includes/stlab/concurrency/tuple_algorithm.hpp/remove_placeholder3CTuple3E/function3CIndex3E/index.md rename to docs/include/stlab/concurrency/tuple_algorithm.hpp/remove_placeholder3CTuple3E/function3CIndex3E/index.md diff --git a/docs/includes/stlab/concurrency/tuple_algorithm.hpp/remove_placeholder3CTuple3E/index.md b/docs/include/stlab/concurrency/tuple_algorithm.hpp/remove_placeholder3CTuple3E/index.md similarity index 100% rename from docs/includes/stlab/concurrency/tuple_algorithm.hpp/remove_placeholder3CTuple3E/index.md rename to docs/include/stlab/concurrency/tuple_algorithm.hpp/remove_placeholder3CTuple3E/index.md diff --git a/docs/includes/stlab/concurrency/utility.hpp/index.md b/docs/include/stlab/concurrency/utility.hpp/index.md similarity index 100% rename from docs/includes/stlab/concurrency/utility.hpp/index.md rename to docs/include/stlab/concurrency/utility.hpp/index.md diff --git a/docs/includes/stlab/copy_on_write.hpp/copy_on_write3CT3E/f_operator213D.md b/docs/include/stlab/copy_on_write.hpp/copy_on_write3CT3E/f_operator213D.md similarity index 100% rename from docs/includes/stlab/copy_on_write.hpp/copy_on_write3CT3E/f_operator213D.md rename to docs/include/stlab/copy_on_write.hpp/copy_on_write3CT3E/f_operator213D.md diff --git a/docs/includes/stlab/copy_on_write.hpp/copy_on_write3CT3E/f_operator3C.md b/docs/include/stlab/copy_on_write.hpp/copy_on_write3CT3E/f_operator3C.md similarity index 100% rename from docs/includes/stlab/copy_on_write.hpp/copy_on_write3CT3E/f_operator3C.md rename to docs/include/stlab/copy_on_write.hpp/copy_on_write3CT3E/f_operator3C.md diff --git a/docs/includes/stlab/copy_on_write.hpp/copy_on_write3CT3E/f_operator3C3D.md b/docs/include/stlab/copy_on_write.hpp/copy_on_write3CT3E/f_operator3C3D.md similarity index 100% rename from docs/includes/stlab/copy_on_write.hpp/copy_on_write3CT3E/f_operator3C3D.md rename to docs/include/stlab/copy_on_write.hpp/copy_on_write3CT3E/f_operator3C3D.md diff --git a/docs/includes/stlab/copy_on_write.hpp/copy_on_write3CT3E/f_operator3D3D.md b/docs/include/stlab/copy_on_write.hpp/copy_on_write3CT3E/f_operator3D3D.md similarity index 100% rename from docs/includes/stlab/copy_on_write.hpp/copy_on_write3CT3E/f_operator3D3D.md rename to docs/include/stlab/copy_on_write.hpp/copy_on_write3CT3E/f_operator3D3D.md diff --git a/docs/includes/stlab/copy_on_write.hpp/copy_on_write3CT3E/f_operator3E.md b/docs/include/stlab/copy_on_write.hpp/copy_on_write3CT3E/f_operator3E.md similarity index 100% rename from docs/includes/stlab/copy_on_write.hpp/copy_on_write3CT3E/f_operator3E.md rename to docs/include/stlab/copy_on_write.hpp/copy_on_write3CT3E/f_operator3E.md diff --git a/docs/includes/stlab/copy_on_write.hpp/copy_on_write3CT3E/f_operator3E3D.md b/docs/include/stlab/copy_on_write.hpp/copy_on_write3CT3E/f_operator3E3D.md similarity index 100% rename from docs/includes/stlab/copy_on_write.hpp/copy_on_write3CT3E/f_operator3E3D.md rename to docs/include/stlab/copy_on_write.hpp/copy_on_write3CT3E/f_operator3E3D.md diff --git a/docs/includes/stlab/copy_on_write.hpp/copy_on_write3CT3E/f_swap.md b/docs/include/stlab/copy_on_write.hpp/copy_on_write3CT3E/f_swap.md similarity index 100% rename from docs/includes/stlab/copy_on_write.hpp/copy_on_write3CT3E/f_swap.md rename to docs/include/stlab/copy_on_write.hpp/copy_on_write3CT3E/f_swap.md diff --git a/docs/includes/stlab/copy_on_write.hpp/copy_on_write3CT3E/index.md b/docs/include/stlab/copy_on_write.hpp/copy_on_write3CT3E/index.md similarity index 100% rename from docs/includes/stlab/copy_on_write.hpp/copy_on_write3CT3E/index.md rename to docs/include/stlab/copy_on_write.hpp/copy_on_write3CT3E/index.md diff --git a/docs/includes/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_copy_on_write3CT3E.md b/docs/include/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_copy_on_write3CT3E.md similarity index 100% rename from docs/includes/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_copy_on_write3CT3E.md rename to docs/include/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_copy_on_write3CT3E.md diff --git a/docs/includes/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_identity.md b/docs/include/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_identity.md similarity index 100% rename from docs/includes/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_identity.md rename to docs/include/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_identity.md diff --git a/docs/includes/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_operator-3E.md b/docs/include/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_operator-3E.md similarity index 100% rename from docs/includes/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_operator-3E.md rename to docs/include/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_operator-3E.md diff --git a/docs/includes/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_operator20const20element_type2026.md b/docs/include/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_operator20const20element_type2026.md similarity index 100% rename from docs/includes/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_operator20const20element_type2026.md rename to docs/include/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_operator20const20element_type2026.md diff --git a/docs/includes/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_operator2A.md b/docs/include/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_operator2A.md similarity index 100% rename from docs/includes/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_operator2A.md rename to docs/include/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_operator2A.md diff --git a/docs/includes/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_operator3D.md b/docs/include/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_operator3D.md similarity index 100% rename from docs/includes/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_operator3D.md rename to docs/include/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_operator3D.md diff --git a/docs/includes/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_read.md b/docs/include/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_read.md similarity index 100% rename from docs/includes/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_read.md rename to docs/include/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_read.md diff --git a/docs/includes/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_unique.md b/docs/include/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_unique.md similarity index 100% rename from docs/includes/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_unique.md rename to docs/include/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_unique.md diff --git a/docs/includes/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_unique_instance.md b/docs/include/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_unique_instance.md similarity index 100% rename from docs/includes/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_unique_instance.md rename to docs/include/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_unique_instance.md diff --git a/docs/includes/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_write.md b/docs/include/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_write.md similarity index 100% rename from docs/includes/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_write.md rename to docs/include/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_write.md diff --git a/docs/includes/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_~copy_on_write3CT3E.md b/docs/include/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_~copy_on_write3CT3E.md similarity index 100% rename from docs/includes/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_~copy_on_write3CT3E.md rename to docs/include/stlab/copy_on_write.hpp/copy_on_write3CT3E/m_~copy_on_write3CT3E.md diff --git a/docs/includes/stlab/copy_on_write.hpp/index.md b/docs/include/stlab/copy_on_write.hpp/index.md similarity index 100% rename from docs/includes/stlab/copy_on_write.hpp/index.md rename to docs/include/stlab/copy_on_write.hpp/index.md diff --git a/docs/includes/stlab/enum_ops.hpp/f_operator--.md b/docs/include/stlab/enum_ops.hpp/f_operator--.md similarity index 100% rename from docs/includes/stlab/enum_ops.hpp/f_operator--.md rename to docs/include/stlab/enum_ops.hpp/f_operator--.md diff --git a/docs/includes/stlab/enum_ops.hpp/f_operator-.md b/docs/include/stlab/enum_ops.hpp/f_operator-.md similarity index 100% rename from docs/includes/stlab/enum_ops.hpp/f_operator-.md rename to docs/include/stlab/enum_ops.hpp/f_operator-.md diff --git a/docs/includes/stlab/enum_ops.hpp/f_operator-3D.md b/docs/include/stlab/enum_ops.hpp/f_operator-3D.md similarity index 100% rename from docs/includes/stlab/enum_ops.hpp/f_operator-3D.md rename to docs/include/stlab/enum_ops.hpp/f_operator-3D.md diff --git a/docs/includes/stlab/enum_ops.hpp/f_operator21.md b/docs/include/stlab/enum_ops.hpp/f_operator21.md similarity index 100% rename from docs/includes/stlab/enum_ops.hpp/f_operator21.md rename to docs/include/stlab/enum_ops.hpp/f_operator21.md diff --git a/docs/includes/stlab/enum_ops.hpp/f_operator213D.md b/docs/include/stlab/enum_ops.hpp/f_operator213D.md similarity index 100% rename from docs/includes/stlab/enum_ops.hpp/f_operator213D.md rename to docs/include/stlab/enum_ops.hpp/f_operator213D.md diff --git a/docs/includes/stlab/enum_ops.hpp/f_operator25.md b/docs/include/stlab/enum_ops.hpp/f_operator25.md similarity index 100% rename from docs/includes/stlab/enum_ops.hpp/f_operator25.md rename to docs/include/stlab/enum_ops.hpp/f_operator25.md diff --git a/docs/includes/stlab/enum_ops.hpp/f_operator253D.md b/docs/include/stlab/enum_ops.hpp/f_operator253D.md similarity index 100% rename from docs/includes/stlab/enum_ops.hpp/f_operator253D.md rename to docs/include/stlab/enum_ops.hpp/f_operator253D.md diff --git a/docs/includes/stlab/enum_ops.hpp/f_operator26.md b/docs/include/stlab/enum_ops.hpp/f_operator26.md similarity index 100% rename from docs/includes/stlab/enum_ops.hpp/f_operator26.md rename to docs/include/stlab/enum_ops.hpp/f_operator26.md diff --git a/docs/includes/stlab/enum_ops.hpp/f_operator263D.md b/docs/include/stlab/enum_ops.hpp/f_operator263D.md similarity index 100% rename from docs/includes/stlab/enum_ops.hpp/f_operator263D.md rename to docs/include/stlab/enum_ops.hpp/f_operator263D.md diff --git a/docs/includes/stlab/enum_ops.hpp/f_operator2A.md b/docs/include/stlab/enum_ops.hpp/f_operator2A.md similarity index 100% rename from docs/includes/stlab/enum_ops.hpp/f_operator2A.md rename to docs/include/stlab/enum_ops.hpp/f_operator2A.md diff --git a/docs/includes/stlab/enum_ops.hpp/f_operator2A3D.md b/docs/include/stlab/enum_ops.hpp/f_operator2A3D.md similarity index 100% rename from docs/includes/stlab/enum_ops.hpp/f_operator2A3D.md rename to docs/include/stlab/enum_ops.hpp/f_operator2A3D.md diff --git a/docs/includes/stlab/enum_ops.hpp/f_operator2B.md b/docs/include/stlab/enum_ops.hpp/f_operator2B.md similarity index 100% rename from docs/includes/stlab/enum_ops.hpp/f_operator2B.md rename to docs/include/stlab/enum_ops.hpp/f_operator2B.md diff --git a/docs/includes/stlab/enum_ops.hpp/f_operator2B2B.md b/docs/include/stlab/enum_ops.hpp/f_operator2B2B.md similarity index 100% rename from docs/includes/stlab/enum_ops.hpp/f_operator2B2B.md rename to docs/include/stlab/enum_ops.hpp/f_operator2B2B.md diff --git a/docs/includes/stlab/enum_ops.hpp/f_operator2B3D.md b/docs/include/stlab/enum_ops.hpp/f_operator2B3D.md similarity index 100% rename from docs/includes/stlab/enum_ops.hpp/f_operator2B3D.md rename to docs/include/stlab/enum_ops.hpp/f_operator2B3D.md diff --git a/docs/includes/stlab/enum_ops.hpp/f_operator2F.md b/docs/include/stlab/enum_ops.hpp/f_operator2F.md similarity index 100% rename from docs/includes/stlab/enum_ops.hpp/f_operator2F.md rename to docs/include/stlab/enum_ops.hpp/f_operator2F.md diff --git a/docs/includes/stlab/enum_ops.hpp/f_operator2F3D.md b/docs/include/stlab/enum_ops.hpp/f_operator2F3D.md similarity index 100% rename from docs/includes/stlab/enum_ops.hpp/f_operator2F3D.md rename to docs/include/stlab/enum_ops.hpp/f_operator2F3D.md diff --git a/docs/includes/stlab/enum_ops.hpp/f_operator3C3C.md b/docs/include/stlab/enum_ops.hpp/f_operator3C3C.md similarity index 100% rename from docs/includes/stlab/enum_ops.hpp/f_operator3C3C.md rename to docs/include/stlab/enum_ops.hpp/f_operator3C3C.md diff --git a/docs/includes/stlab/enum_ops.hpp/f_operator3C3C3D.md b/docs/include/stlab/enum_ops.hpp/f_operator3C3C3D.md similarity index 100% rename from docs/includes/stlab/enum_ops.hpp/f_operator3C3C3D.md rename to docs/include/stlab/enum_ops.hpp/f_operator3C3C3D.md diff --git a/docs/includes/stlab/enum_ops.hpp/f_operator3D3D.md b/docs/include/stlab/enum_ops.hpp/f_operator3D3D.md similarity index 100% rename from docs/includes/stlab/enum_ops.hpp/f_operator3D3D.md rename to docs/include/stlab/enum_ops.hpp/f_operator3D3D.md diff --git a/docs/includes/stlab/enum_ops.hpp/f_operator3E3E.md b/docs/include/stlab/enum_ops.hpp/f_operator3E3E.md similarity index 100% rename from docs/includes/stlab/enum_ops.hpp/f_operator3E3E.md rename to docs/include/stlab/enum_ops.hpp/f_operator3E3E.md diff --git a/docs/includes/stlab/enum_ops.hpp/f_operator3E3E3D.md b/docs/include/stlab/enum_ops.hpp/f_operator3E3E3D.md similarity index 100% rename from docs/includes/stlab/enum_ops.hpp/f_operator3E3E3D.md rename to docs/include/stlab/enum_ops.hpp/f_operator3E3E3D.md diff --git a/docs/includes/stlab/enum_ops.hpp/f_operator5E.md b/docs/include/stlab/enum_ops.hpp/f_operator5E.md similarity index 100% rename from docs/includes/stlab/enum_ops.hpp/f_operator5E.md rename to docs/include/stlab/enum_ops.hpp/f_operator5E.md diff --git a/docs/includes/stlab/enum_ops.hpp/f_operator5E3D.md b/docs/include/stlab/enum_ops.hpp/f_operator5E3D.md similarity index 100% rename from docs/includes/stlab/enum_ops.hpp/f_operator5E3D.md rename to docs/include/stlab/enum_ops.hpp/f_operator5E3D.md diff --git a/docs/includes/stlab/enum_ops.hpp/f_operator7C.md b/docs/include/stlab/enum_ops.hpp/f_operator7C.md similarity index 100% rename from docs/includes/stlab/enum_ops.hpp/f_operator7C.md rename to docs/include/stlab/enum_ops.hpp/f_operator7C.md diff --git a/docs/includes/stlab/enum_ops.hpp/f_operator7C3D.md b/docs/include/stlab/enum_ops.hpp/f_operator7C3D.md similarity index 100% rename from docs/includes/stlab/enum_ops.hpp/f_operator7C3D.md rename to docs/include/stlab/enum_ops.hpp/f_operator7C3D.md diff --git a/docs/includes/stlab/enum_ops.hpp/f_operator~.md b/docs/include/stlab/enum_ops.hpp/f_operator~.md similarity index 100% rename from docs/includes/stlab/enum_ops.hpp/f_operator~.md rename to docs/include/stlab/enum_ops.hpp/f_operator~.md diff --git a/docs/includes/stlab/enum_ops.hpp/f_stlab_enable_arithmetic_enum.md b/docs/include/stlab/enum_ops.hpp/f_stlab_enable_arithmetic_enum.md similarity index 100% rename from docs/includes/stlab/enum_ops.hpp/f_stlab_enable_arithmetic_enum.md rename to docs/include/stlab/enum_ops.hpp/f_stlab_enable_arithmetic_enum.md diff --git a/docs/includes/stlab/enum_ops.hpp/f_stlab_enable_bitmask_enum.md b/docs/include/stlab/enum_ops.hpp/f_stlab_enable_bitmask_enum.md similarity index 100% rename from docs/includes/stlab/enum_ops.hpp/f_stlab_enable_bitmask_enum.md rename to docs/include/stlab/enum_ops.hpp/f_stlab_enable_bitmask_enum.md diff --git a/docs/includes/stlab/enum_ops.hpp/index.md b/docs/include/stlab/enum_ops.hpp/index.md similarity index 100% rename from docs/includes/stlab/enum_ops.hpp/index.md rename to docs/include/stlab/enum_ops.hpp/index.md diff --git a/docs/includes/stlab/enum_ops.hpp/safe_underlying_type3CT.399d3431/index.md b/docs/include/stlab/enum_ops.hpp/safe_underlying_type3CT.399d3431/index.md similarity index 100% rename from docs/includes/stlab/enum_ops.hpp/safe_underlying_type3CT.399d3431/index.md rename to docs/include/stlab/enum_ops.hpp/safe_underlying_type3CT.399d3431/index.md diff --git a/docs/includes/stlab/enum_ops.hpp/safe_underlying_type3CT.af98cac6/index.md b/docs/include/stlab/enum_ops.hpp/safe_underlying_type3CT.af98cac6/index.md similarity index 100% rename from docs/includes/stlab/enum_ops.hpp/safe_underlying_type3CT.af98cac6/index.md rename to docs/include/stlab/enum_ops.hpp/safe_underlying_type3CT.af98cac6/index.md diff --git a/docs/includes/stlab/forest.hpp/child_adaptor3CForest3E/index.md b/docs/include/stlab/forest.hpp/child_adaptor3CForest3E/index.md similarity index 100% rename from docs/includes/stlab/forest.hpp/child_adaptor3CForest3E/index.md rename to docs/include/stlab/forest.hpp/child_adaptor3CForest3E/index.md diff --git a/docs/includes/stlab/forest.hpp/child_adaptor3CForest3E/m_back.md b/docs/include/stlab/forest.hpp/child_adaptor3CForest3E/m_back.md similarity index 100% rename from docs/includes/stlab/forest.hpp/child_adaptor3CForest3E/m_back.md rename to docs/include/stlab/forest.hpp/child_adaptor3CForest3E/m_back.md diff --git a/docs/includes/stlab/forest.hpp/child_adaptor3CForest3E/m_child_adaptor3CForest3E.md b/docs/include/stlab/forest.hpp/child_adaptor3CForest3E/m_child_adaptor3CForest3E.md similarity index 100% rename from docs/includes/stlab/forest.hpp/child_adaptor3CForest3E/m_child_adaptor3CForest3E.md rename to docs/include/stlab/forest.hpp/child_adaptor3CForest3E/m_child_adaptor3CForest3E.md diff --git a/docs/includes/stlab/forest.hpp/child_adaptor3CForest3E/m_front.md b/docs/include/stlab/forest.hpp/child_adaptor3CForest3E/m_front.md similarity index 100% rename from docs/includes/stlab/forest.hpp/child_adaptor3CForest3E/m_front.md rename to docs/include/stlab/forest.hpp/child_adaptor3CForest3E/m_front.md diff --git a/docs/includes/stlab/forest.hpp/child_adaptor3CForest3E/m_pop_back.md b/docs/include/stlab/forest.hpp/child_adaptor3CForest3E/m_pop_back.md similarity index 100% rename from docs/includes/stlab/forest.hpp/child_adaptor3CForest3E/m_pop_back.md rename to docs/include/stlab/forest.hpp/child_adaptor3CForest3E/m_pop_back.md diff --git a/docs/includes/stlab/forest.hpp/child_adaptor3CForest3E/m_pop_front.md b/docs/include/stlab/forest.hpp/child_adaptor3CForest3E/m_pop_front.md similarity index 100% rename from docs/includes/stlab/forest.hpp/child_adaptor3CForest3E/m_pop_front.md rename to docs/include/stlab/forest.hpp/child_adaptor3CForest3E/m_pop_front.md diff --git a/docs/includes/stlab/forest.hpp/child_adaptor3CForest3E/m_push_back.md b/docs/include/stlab/forest.hpp/child_adaptor3CForest3E/m_push_back.md similarity index 100% rename from docs/includes/stlab/forest.hpp/child_adaptor3CForest3E/m_push_back.md rename to docs/include/stlab/forest.hpp/child_adaptor3CForest3E/m_push_back.md diff --git a/docs/includes/stlab/forest.hpp/child_adaptor3CForest3E/m_push_front.md b/docs/include/stlab/forest.hpp/child_adaptor3CForest3E/m_push_front.md similarity index 100% rename from docs/includes/stlab/forest.hpp/child_adaptor3CForest3E/m_push_front.md rename to docs/include/stlab/forest.hpp/child_adaptor3CForest3E/m_push_front.md diff --git a/docs/includes/stlab/forest.hpp/child_iterator3CI3E/f_operator213D.md b/docs/include/stlab/forest.hpp/child_iterator3CI3E/f_operator213D.md similarity index 100% rename from docs/includes/stlab/forest.hpp/child_iterator3CI3E/f_operator213D.md rename to docs/include/stlab/forest.hpp/child_iterator3CI3E/f_operator213D.md diff --git a/docs/includes/stlab/forest.hpp/child_iterator3CI3E/f_operator3D3D.md b/docs/include/stlab/forest.hpp/child_iterator3CI3E/f_operator3D3D.md similarity index 100% rename from docs/includes/stlab/forest.hpp/child_iterator3CI3E/f_operator3D3D.md rename to docs/include/stlab/forest.hpp/child_iterator3CI3E/f_operator3D3D.md diff --git a/docs/includes/stlab/forest.hpp/child_iterator3CI3E/index.md b/docs/include/stlab/forest.hpp/child_iterator3CI3E/index.md similarity index 100% rename from docs/includes/stlab/forest.hpp/child_iterator3CI3E/index.md rename to docs/include/stlab/forest.hpp/child_iterator3CI3E/index.md diff --git a/docs/includes/stlab/forest.hpp/child_iterator3CI3E/m_base.md b/docs/include/stlab/forest.hpp/child_iterator3CI3E/m_base.md similarity index 100% rename from docs/includes/stlab/forest.hpp/child_iterator3CI3E/m_base.md rename to docs/include/stlab/forest.hpp/child_iterator3CI3E/m_base.md diff --git a/docs/includes/stlab/forest.hpp/child_iterator3CI3E/m_child_iterator3CI3E.md b/docs/include/stlab/forest.hpp/child_iterator3CI3E/m_child_iterator3CI3E.md similarity index 100% rename from docs/includes/stlab/forest.hpp/child_iterator3CI3E/m_child_iterator3CI3E.md rename to docs/include/stlab/forest.hpp/child_iterator3CI3E/m_child_iterator3CI3E.md diff --git a/docs/includes/stlab/forest.hpp/child_iterator3CI3E/m_operator--.md b/docs/include/stlab/forest.hpp/child_iterator3CI3E/m_operator--.md similarity index 100% rename from docs/includes/stlab/forest.hpp/child_iterator3CI3E/m_operator--.md rename to docs/include/stlab/forest.hpp/child_iterator3CI3E/m_operator--.md diff --git a/docs/includes/stlab/forest.hpp/child_iterator3CI3E/m_operator-3E.md b/docs/include/stlab/forest.hpp/child_iterator3CI3E/m_operator-3E.md similarity index 100% rename from docs/includes/stlab/forest.hpp/child_iterator3CI3E/m_operator-3E.md rename to docs/include/stlab/forest.hpp/child_iterator3CI3E/m_operator-3E.md diff --git a/docs/includes/stlab/forest.hpp/child_iterator3CI3E/m_operator2A.md b/docs/include/stlab/forest.hpp/child_iterator3CI3E/m_operator2A.md similarity index 100% rename from docs/includes/stlab/forest.hpp/child_iterator3CI3E/m_operator2A.md rename to docs/include/stlab/forest.hpp/child_iterator3CI3E/m_operator2A.md diff --git a/docs/includes/stlab/forest.hpp/child_iterator3CI3E/m_operator2B2B.md b/docs/include/stlab/forest.hpp/child_iterator3CI3E/m_operator2B2B.md similarity index 100% rename from docs/includes/stlab/forest.hpp/child_iterator3CI3E/m_operator2B2B.md rename to docs/include/stlab/forest.hpp/child_iterator3CI3E/m_operator2B2B.md diff --git a/docs/includes/stlab/forest.hpp/depth_fullorder_iterator3CI3E/index.md b/docs/include/stlab/forest.hpp/depth_fullorder_iterator3CI3E/index.md similarity index 100% rename from docs/includes/stlab/forest.hpp/depth_fullorder_iterator3CI3E/index.md rename to docs/include/stlab/forest.hpp/depth_fullorder_iterator3CI3E/index.md diff --git a/docs/includes/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_base.md b/docs/include/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_base.md similarity index 100% rename from docs/includes/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_base.md rename to docs/include/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_base.md diff --git a/docs/includes/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_depth.md b/docs/include/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_depth.md similarity index 100% rename from docs/includes/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_depth.md rename to docs/include/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_depth.md diff --git a/docs/includes/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_depth_fullorder_iterator3CI3E.md b/docs/include/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_depth_fullorder_iterator3CI3E.md similarity index 100% rename from docs/includes/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_depth_fullorder_iterator3CI3E.md rename to docs/include/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_depth_fullorder_iterator3CI3E.md diff --git a/docs/includes/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_edge.md b/docs/include/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_edge.md similarity index 100% rename from docs/includes/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_edge.md rename to docs/include/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_edge.md diff --git a/docs/includes/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_equal_node.md b/docs/include/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_equal_node.md similarity index 100% rename from docs/includes/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_equal_node.md rename to docs/include/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_equal_node.md diff --git a/docs/includes/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_operator--.md b/docs/include/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_operator--.md similarity index 100% rename from docs/includes/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_operator--.md rename to docs/include/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_operator--.md diff --git a/docs/includes/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_operator-3E.md b/docs/include/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_operator-3E.md similarity index 100% rename from docs/includes/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_operator-3E.md rename to docs/include/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_operator-3E.md diff --git a/docs/includes/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_operator2A.md b/docs/include/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_operator2A.md similarity index 100% rename from docs/includes/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_operator2A.md rename to docs/include/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_operator2A.md diff --git a/docs/includes/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_operator2B2B.md b/docs/include/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_operator2B2B.md similarity index 100% rename from docs/includes/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_operator2B2B.md rename to docs/include/stlab/forest.hpp/depth_fullorder_iterator3CI3E/m_operator2B2B.md diff --git a/docs/includes/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/index.md b/docs/include/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/index.md similarity index 100% rename from docs/includes/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/index.md rename to docs/include/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/index.md diff --git a/docs/includes/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_base.md b/docs/include/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_base.md similarity index 100% rename from docs/includes/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_base.md rename to docs/include/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_base.md diff --git a/docs/includes/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_edge_iterator3CI2C20Edge3E.md b/docs/include/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_edge_iterator3CI2C20Edge3E.md similarity index 100% rename from docs/includes/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_edge_iterator3CI2C20Edge3E.md rename to docs/include/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_edge_iterator3CI2C20Edge3E.md diff --git a/docs/includes/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_operator--.md b/docs/include/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_operator--.md similarity index 100% rename from docs/includes/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_operator--.md rename to docs/include/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_operator--.md diff --git a/docs/includes/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_operator-3E.md b/docs/include/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_operator-3E.md similarity index 100% rename from docs/includes/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_operator-3E.md rename to docs/include/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_operator-3E.md diff --git a/docs/includes/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_operator2A.md b/docs/include/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_operator2A.md similarity index 100% rename from docs/includes/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_operator2A.md rename to docs/include/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_operator2A.md diff --git a/docs/includes/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_operator2B2B.md b/docs/include/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_operator2B2B.md similarity index 100% rename from docs/includes/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_operator2B2B.md rename to docs/include/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_operator2B2B.md diff --git a/docs/includes/stlab/forest.hpp/f_child_begin.md b/docs/include/stlab/forest.hpp/f_child_begin.md similarity index 100% rename from docs/includes/stlab/forest.hpp/f_child_begin.md rename to docs/include/stlab/forest.hpp/f_child_begin.md diff --git a/docs/includes/stlab/forest.hpp/f_child_end.md b/docs/include/stlab/forest.hpp/f_child_end.md similarity index 100% rename from docs/includes/stlab/forest.hpp/f_child_end.md rename to docs/include/stlab/forest.hpp/f_child_end.md diff --git a/docs/includes/stlab/forest.hpp/f_child_range.md b/docs/include/stlab/forest.hpp/f_child_range.md similarity index 100% rename from docs/includes/stlab/forest.hpp/f_child_range.md rename to docs/include/stlab/forest.hpp/f_child_range.md diff --git a/docs/includes/stlab/forest.hpp/f_depth_range.md b/docs/include/stlab/forest.hpp/f_depth_range.md similarity index 100% rename from docs/includes/stlab/forest.hpp/f_depth_range.md rename to docs/include/stlab/forest.hpp/f_depth_range.md diff --git a/docs/includes/stlab/forest.hpp/f_filter_fullorder_range.md b/docs/include/stlab/forest.hpp/f_filter_fullorder_range.md similarity index 100% rename from docs/includes/stlab/forest.hpp/f_filter_fullorder_range.md rename to docs/include/stlab/forest.hpp/f_filter_fullorder_range.md diff --git a/docs/includes/stlab/forest.hpp/f_find_edge.md b/docs/include/stlab/forest.hpp/f_find_edge.md similarity index 100% rename from docs/includes/stlab/forest.hpp/f_find_edge.md rename to docs/include/stlab/forest.hpp/f_find_edge.md diff --git a/docs/includes/stlab/forest.hpp/f_find_edge_reverse.md b/docs/include/stlab/forest.hpp/f_find_edge_reverse.md similarity index 100% rename from docs/includes/stlab/forest.hpp/f_find_edge_reverse.md rename to docs/include/stlab/forest.hpp/f_find_edge_reverse.md diff --git a/docs/includes/stlab/forest.hpp/f_find_parent.md b/docs/include/stlab/forest.hpp/f_find_parent.md similarity index 100% rename from docs/includes/stlab/forest.hpp/f_find_parent.md rename to docs/include/stlab/forest.hpp/f_find_parent.md diff --git a/docs/includes/stlab/forest.hpp/f_has_children.md b/docs/include/stlab/forest.hpp/f_has_children.md similarity index 100% rename from docs/includes/stlab/forest.hpp/f_has_children.md rename to docs/include/stlab/forest.hpp/f_has_children.md diff --git a/docs/includes/stlab/forest.hpp/f_is_leading.md b/docs/include/stlab/forest.hpp/f_is_leading.md similarity index 100% rename from docs/includes/stlab/forest.hpp/f_is_leading.md rename to docs/include/stlab/forest.hpp/f_is_leading.md diff --git a/docs/includes/stlab/forest.hpp/f_is_trailing.md b/docs/include/stlab/forest.hpp/f_is_trailing.md similarity index 100% rename from docs/includes/stlab/forest.hpp/f_is_trailing.md rename to docs/include/stlab/forest.hpp/f_is_trailing.md diff --git a/docs/includes/stlab/forest.hpp/f_leading_of.md b/docs/include/stlab/forest.hpp/f_leading_of.md similarity index 100% rename from docs/includes/stlab/forest.hpp/f_leading_of.md rename to docs/include/stlab/forest.hpp/f_leading_of.md diff --git a/docs/includes/stlab/forest.hpp/f_pivot.md b/docs/include/stlab/forest.hpp/f_pivot.md similarity index 100% rename from docs/includes/stlab/forest.hpp/f_pivot.md rename to docs/include/stlab/forest.hpp/f_pivot.md diff --git a/docs/includes/stlab/forest.hpp/f_pivot_of.md b/docs/include/stlab/forest.hpp/f_pivot_of.md similarity index 100% rename from docs/includes/stlab/forest.hpp/f_pivot_of.md rename to docs/include/stlab/forest.hpp/f_pivot_of.md diff --git a/docs/includes/stlab/forest.hpp/f_postorder_range.md b/docs/include/stlab/forest.hpp/f_postorder_range.md similarity index 100% rename from docs/includes/stlab/forest.hpp/f_postorder_range.md rename to docs/include/stlab/forest.hpp/f_postorder_range.md diff --git a/docs/includes/stlab/forest.hpp/f_preorder_range.md b/docs/include/stlab/forest.hpp/f_preorder_range.md similarity index 100% rename from docs/includes/stlab/forest.hpp/f_preorder_range.md rename to docs/include/stlab/forest.hpp/f_preorder_range.md diff --git a/docs/includes/stlab/forest.hpp/f_reverse_fullorder_range.md b/docs/include/stlab/forest.hpp/f_reverse_fullorder_range.md similarity index 100% rename from docs/includes/stlab/forest.hpp/f_reverse_fullorder_range.md rename to docs/include/stlab/forest.hpp/f_reverse_fullorder_range.md diff --git a/docs/includes/stlab/forest.hpp/f_trailing_of.md b/docs/include/stlab/forest.hpp/f_trailing_of.md similarity index 100% rename from docs/includes/stlab/forest.hpp/f_trailing_of.md rename to docs/include/stlab/forest.hpp/f_trailing_of.md diff --git a/docs/includes/stlab/forest.hpp/filter_fullorder_iterat.e37adade/index.md b/docs/include/stlab/forest.hpp/filter_fullorder_iterat.e37adade/index.md similarity index 100% rename from docs/includes/stlab/forest.hpp/filter_fullorder_iterat.e37adade/index.md rename to docs/include/stlab/forest.hpp/filter_fullorder_iterat.e37adade/index.md diff --git a/docs/includes/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_base.md b/docs/include/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_base.md similarity index 100% rename from docs/includes/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_base.md rename to docs/include/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_base.md diff --git a/docs/includes/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_base_reference.md b/docs/include/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_base_reference.md similarity index 100% rename from docs/includes/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_base_reference.md rename to docs/include/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_base_reference.md diff --git a/docs/includes/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_edge.md b/docs/include/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_edge.md similarity index 100% rename from docs/includes/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_edge.md rename to docs/include/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_edge.md diff --git a/docs/includes/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_equal_node.md b/docs/include/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_equal_node.md similarity index 100% rename from docs/includes/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_equal_node.md rename to docs/include/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_equal_node.md diff --git a/docs/includes/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_filter_fullorder_iterator3CI2C20P3E.md b/docs/include/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_filter_fullorder_iterator3CI2C20P3E.md similarity index 100% rename from docs/includes/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_filter_fullorder_iterator3CI2C20P3E.md rename to docs/include/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_filter_fullorder_iterator3CI2C20P3E.md diff --git a/docs/includes/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_operator--.md b/docs/include/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_operator--.md similarity index 100% rename from docs/includes/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_operator--.md rename to docs/include/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_operator--.md diff --git a/docs/includes/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_operator-3E.md b/docs/include/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_operator-3E.md similarity index 100% rename from docs/includes/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_operator-3E.md rename to docs/include/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_operator-3E.md diff --git a/docs/includes/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_operator2A.md b/docs/include/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_operator2A.md similarity index 100% rename from docs/includes/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_operator2A.md rename to docs/include/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_operator2A.md diff --git a/docs/includes/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_operator2B2B.md b/docs/include/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_operator2B2B.md similarity index 100% rename from docs/includes/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_operator2B2B.md rename to docs/include/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_operator2B2B.md diff --git a/docs/includes/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_predicate.md b/docs/include/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_predicate.md similarity index 100% rename from docs/includes/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_predicate.md rename to docs/include/stlab/forest.hpp/filter_fullorder_iterat.e37adade/m_predicate.md diff --git a/docs/includes/stlab/forest.hpp/forest3CT3E/index.md b/docs/include/stlab/forest.hpp/forest3CT3E/index.md similarity index 100% rename from docs/includes/stlab/forest.hpp/forest3CT3E/index.md rename to docs/include/stlab/forest.hpp/forest3CT3E/index.md diff --git a/docs/includes/stlab/forest.hpp/forest3CT3E/m_back.md b/docs/include/stlab/forest.hpp/forest3CT3E/m_back.md similarity index 100% rename from docs/includes/stlab/forest.hpp/forest3CT3E/m_back.md rename to docs/include/stlab/forest.hpp/forest3CT3E/m_back.md diff --git a/docs/includes/stlab/forest.hpp/forest3CT3E/m_begin.md b/docs/include/stlab/forest.hpp/forest3CT3E/m_begin.md similarity index 100% rename from docs/includes/stlab/forest.hpp/forest3CT3E/m_begin.md rename to docs/include/stlab/forest.hpp/forest3CT3E/m_begin.md diff --git a/docs/includes/stlab/forest.hpp/forest3CT3E/m_clear.md b/docs/include/stlab/forest.hpp/forest3CT3E/m_clear.md similarity index 100% rename from docs/includes/stlab/forest.hpp/forest3CT3E/m_clear.md rename to docs/include/stlab/forest.hpp/forest3CT3E/m_clear.md diff --git a/docs/includes/stlab/forest.hpp/forest3CT3E/m_empty.md b/docs/include/stlab/forest.hpp/forest3CT3E/m_empty.md similarity index 100% rename from docs/includes/stlab/forest.hpp/forest3CT3E/m_empty.md rename to docs/include/stlab/forest.hpp/forest3CT3E/m_empty.md diff --git a/docs/includes/stlab/forest.hpp/forest3CT3E/m_end.md b/docs/include/stlab/forest.hpp/forest3CT3E/m_end.md similarity index 100% rename from docs/includes/stlab/forest.hpp/forest3CT3E/m_end.md rename to docs/include/stlab/forest.hpp/forest3CT3E/m_end.md diff --git a/docs/includes/stlab/forest.hpp/forest3CT3E/m_erase.md b/docs/include/stlab/forest.hpp/forest3CT3E/m_erase.md similarity index 100% rename from docs/includes/stlab/forest.hpp/forest3CT3E/m_erase.md rename to docs/include/stlab/forest.hpp/forest3CT3E/m_erase.md diff --git a/docs/includes/stlab/forest.hpp/forest3CT3E/m_forest3CT3E.md b/docs/include/stlab/forest.hpp/forest3CT3E/m_forest3CT3E.md similarity index 100% rename from docs/includes/stlab/forest.hpp/forest3CT3E/m_forest3CT3E.md rename to docs/include/stlab/forest.hpp/forest3CT3E/m_forest3CT3E.md diff --git a/docs/includes/stlab/forest.hpp/forest3CT3E/m_front.md b/docs/include/stlab/forest.hpp/forest3CT3E/m_front.md similarity index 100% rename from docs/includes/stlab/forest.hpp/forest3CT3E/m_front.md rename to docs/include/stlab/forest.hpp/forest3CT3E/m_front.md diff --git a/docs/includes/stlab/forest.hpp/forest3CT3E/m_insert.md b/docs/include/stlab/forest.hpp/forest3CT3E/m_insert.md similarity index 100% rename from docs/includes/stlab/forest.hpp/forest3CT3E/m_insert.md rename to docs/include/stlab/forest.hpp/forest3CT3E/m_insert.md diff --git a/docs/includes/stlab/forest.hpp/forest3CT3E/m_insert_parent.md b/docs/include/stlab/forest.hpp/forest3CT3E/m_insert_parent.md similarity index 100% rename from docs/includes/stlab/forest.hpp/forest3CT3E/m_insert_parent.md rename to docs/include/stlab/forest.hpp/forest3CT3E/m_insert_parent.md diff --git a/docs/includes/stlab/forest.hpp/forest3CT3E/m_max_size.md b/docs/include/stlab/forest.hpp/forest3CT3E/m_max_size.md similarity index 100% rename from docs/includes/stlab/forest.hpp/forest3CT3E/m_max_size.md rename to docs/include/stlab/forest.hpp/forest3CT3E/m_max_size.md diff --git a/docs/includes/stlab/forest.hpp/forest3CT3E/m_operator3D.md b/docs/include/stlab/forest.hpp/forest3CT3E/m_operator3D.md similarity index 100% rename from docs/includes/stlab/forest.hpp/forest3CT3E/m_operator3D.md rename to docs/include/stlab/forest.hpp/forest3CT3E/m_operator3D.md diff --git a/docs/includes/stlab/forest.hpp/forest3CT3E/m_pop_back.md b/docs/include/stlab/forest.hpp/forest3CT3E/m_pop_back.md similarity index 100% rename from docs/includes/stlab/forest.hpp/forest3CT3E/m_pop_back.md rename to docs/include/stlab/forest.hpp/forest3CT3E/m_pop_back.md diff --git a/docs/includes/stlab/forest.hpp/forest3CT3E/m_pop_front.md b/docs/include/stlab/forest.hpp/forest3CT3E/m_pop_front.md similarity index 100% rename from docs/includes/stlab/forest.hpp/forest3CT3E/m_pop_front.md rename to docs/include/stlab/forest.hpp/forest3CT3E/m_pop_front.md diff --git a/docs/includes/stlab/forest.hpp/forest3CT3E/m_push_back.md b/docs/include/stlab/forest.hpp/forest3CT3E/m_push_back.md similarity index 100% rename from docs/includes/stlab/forest.hpp/forest3CT3E/m_push_back.md rename to docs/include/stlab/forest.hpp/forest3CT3E/m_push_back.md diff --git a/docs/includes/stlab/forest.hpp/forest3CT3E/m_push_front.md b/docs/include/stlab/forest.hpp/forest3CT3E/m_push_front.md similarity index 100% rename from docs/includes/stlab/forest.hpp/forest3CT3E/m_push_front.md rename to docs/include/stlab/forest.hpp/forest3CT3E/m_push_front.md diff --git a/docs/includes/stlab/forest.hpp/forest3CT3E/m_rbegin.md b/docs/include/stlab/forest.hpp/forest3CT3E/m_rbegin.md similarity index 100% rename from docs/includes/stlab/forest.hpp/forest3CT3E/m_rbegin.md rename to docs/include/stlab/forest.hpp/forest3CT3E/m_rbegin.md diff --git a/docs/includes/stlab/forest.hpp/forest3CT3E/m_rend.md b/docs/include/stlab/forest.hpp/forest3CT3E/m_rend.md similarity index 100% rename from docs/includes/stlab/forest.hpp/forest3CT3E/m_rend.md rename to docs/include/stlab/forest.hpp/forest3CT3E/m_rend.md diff --git a/docs/includes/stlab/forest.hpp/forest3CT3E/m_reverse.md b/docs/include/stlab/forest.hpp/forest3CT3E/m_reverse.md similarity index 100% rename from docs/includes/stlab/forest.hpp/forest3CT3E/m_reverse.md rename to docs/include/stlab/forest.hpp/forest3CT3E/m_reverse.md diff --git a/docs/includes/stlab/forest.hpp/forest3CT3E/m_root.md b/docs/include/stlab/forest.hpp/forest3CT3E/m_root.md similarity index 100% rename from docs/includes/stlab/forest.hpp/forest3CT3E/m_root.md rename to docs/include/stlab/forest.hpp/forest3CT3E/m_root.md diff --git a/docs/includes/stlab/forest.hpp/forest3CT3E/m_size.md b/docs/include/stlab/forest.hpp/forest3CT3E/m_size.md similarity index 100% rename from docs/includes/stlab/forest.hpp/forest3CT3E/m_size.md rename to docs/include/stlab/forest.hpp/forest3CT3E/m_size.md diff --git a/docs/includes/stlab/forest.hpp/forest3CT3E/m_size_valid.md b/docs/include/stlab/forest.hpp/forest3CT3E/m_size_valid.md similarity index 100% rename from docs/includes/stlab/forest.hpp/forest3CT3E/m_size_valid.md rename to docs/include/stlab/forest.hpp/forest3CT3E/m_size_valid.md diff --git a/docs/includes/stlab/forest.hpp/forest3CT3E/m_splice.md b/docs/include/stlab/forest.hpp/forest3CT3E/m_splice.md similarity index 100% rename from docs/includes/stlab/forest.hpp/forest3CT3E/m_splice.md rename to docs/include/stlab/forest.hpp/forest3CT3E/m_splice.md diff --git a/docs/includes/stlab/forest.hpp/forest3CT3E/m_swap.md b/docs/include/stlab/forest.hpp/forest3CT3E/m_swap.md similarity index 100% rename from docs/includes/stlab/forest.hpp/forest3CT3E/m_swap.md rename to docs/include/stlab/forest.hpp/forest3CT3E/m_swap.md diff --git a/docs/includes/stlab/forest.hpp/forest3CT3E/m_~forest3CT3E.md b/docs/include/stlab/forest.hpp/forest3CT3E/m_~forest3CT3E.md similarity index 100% rename from docs/includes/stlab/forest.hpp/forest3CT3E/m_~forest3CT3E.md rename to docs/include/stlab/forest.hpp/forest3CT3E/m_~forest3CT3E.md diff --git a/docs/includes/stlab/forest.hpp/forest_range3CI3E/index.md b/docs/include/stlab/forest.hpp/forest_range3CI3E/index.md similarity index 100% rename from docs/includes/stlab/forest.hpp/forest_range3CI3E/index.md rename to docs/include/stlab/forest.hpp/forest_range3CI3E/index.md diff --git a/docs/includes/stlab/forest.hpp/forest_range3CI3E/m_begin.md b/docs/include/stlab/forest.hpp/forest_range3CI3E/m_begin.md similarity index 100% rename from docs/includes/stlab/forest.hpp/forest_range3CI3E/m_begin.md rename to docs/include/stlab/forest.hpp/forest_range3CI3E/m_begin.md diff --git a/docs/includes/stlab/forest.hpp/forest_range3CI3E/m_end.md b/docs/include/stlab/forest.hpp/forest_range3CI3E/m_end.md similarity index 100% rename from docs/includes/stlab/forest.hpp/forest_range3CI3E/m_end.md rename to docs/include/stlab/forest.hpp/forest_range3CI3E/m_end.md diff --git a/docs/includes/stlab/forest.hpp/index.md b/docs/include/stlab/forest.hpp/index.md similarity index 100% rename from docs/includes/stlab/forest.hpp/index.md rename to docs/include/stlab/forest.hpp/index.md diff --git a/docs/includes/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/index.md b/docs/include/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/index.md similarity index 100% rename from docs/includes/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/index.md rename to docs/include/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/index.md diff --git a/docs/includes/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_base.md b/docs/include/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_base.md similarity index 100% rename from docs/includes/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_base.md rename to docs/include/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_base.md diff --git a/docs/includes/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_edge.md b/docs/include/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_edge.md similarity index 100% rename from docs/includes/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_edge.md rename to docs/include/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_edge.md diff --git a/docs/includes/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_equal_node.md b/docs/include/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_equal_node.md similarity index 100% rename from docs/includes/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_equal_node.md rename to docs/include/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_equal_node.md diff --git a/docs/includes/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_operator--.md b/docs/include/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_operator--.md similarity index 100% rename from docs/includes/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_operator--.md rename to docs/include/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_operator--.md diff --git a/docs/includes/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_operator-3E.md b/docs/include/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_operator-3E.md similarity index 100% rename from docs/includes/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_operator-3E.md rename to docs/include/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_operator-3E.md diff --git a/docs/includes/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_operator2A.md b/docs/include/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_operator2A.md similarity index 100% rename from docs/includes/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_operator2A.md rename to docs/include/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_operator2A.md diff --git a/docs/includes/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_operator2B2B.md b/docs/include/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_operator2B2B.md similarity index 100% rename from docs/includes/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_operator2B2B.md rename to docs/include/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_operator2B2B.md diff --git a/docs/includes/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_reverse_fullorder_iterator3CI3E.md b/docs/include/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_reverse_fullorder_iterator3CI3E.md similarity index 100% rename from docs/includes/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_reverse_fullorder_iterator3CI3E.md rename to docs/include/stlab/forest.hpp/reverse_fullorder_iterator3CI3E/m_reverse_fullorder_iterator3CI3E.md diff --git a/docs/includes/stlab/forest.hpp/set_next_fn3Cchild_iter.f83e6c4a/index.md b/docs/include/stlab/forest.hpp/set_next_fn3Cchild_iter.f83e6c4a/index.md similarity index 100% rename from docs/includes/stlab/forest.hpp/set_next_fn3Cchild_iter.f83e6c4a/index.md rename to docs/include/stlab/forest.hpp/set_next_fn3Cchild_iter.f83e6c4a/index.md diff --git a/docs/includes/stlab/forest.hpp/set_next_fn3Cchild_iter.f83e6c4a/m_operator2829.md b/docs/include/stlab/forest.hpp/set_next_fn3Cchild_iter.f83e6c4a/m_operator2829.md similarity index 100% rename from docs/includes/stlab/forest.hpp/set_next_fn3Cchild_iter.f83e6c4a/m_operator2829.md rename to docs/include/stlab/forest.hpp/set_next_fn3Cchild_iter.f83e6c4a/m_operator2829.md diff --git a/docs/includes/stlab/forest.hpp/set_next_fn3Cdetail3A3A.41bceb57/index.md b/docs/include/stlab/forest.hpp/set_next_fn3Cdetail3A3A.41bceb57/index.md similarity index 100% rename from docs/includes/stlab/forest.hpp/set_next_fn3Cdetail3A3A.41bceb57/index.md rename to docs/include/stlab/forest.hpp/set_next_fn3Cdetail3A3A.41bceb57/index.md diff --git a/docs/includes/stlab/forest.hpp/set_next_fn3Cdetail3A3A.41bceb57/m_operator2829.md b/docs/include/stlab/forest.hpp/set_next_fn3Cdetail3A3A.41bceb57/m_operator2829.md similarity index 100% rename from docs/includes/stlab/forest.hpp/set_next_fn3Cdetail3A3A.41bceb57/m_operator2829.md rename to docs/include/stlab/forest.hpp/set_next_fn3Cdetail3A3A.41bceb57/m_operator2829.md diff --git a/docs/includes/stlab/forest.hpp/stlab3A3Aforest_edge.md b/docs/include/stlab/forest.hpp/stlab3A3Aforest_edge.md similarity index 100% rename from docs/includes/stlab/forest.hpp/stlab3A3Aforest_edge.md rename to docs/include/stlab/forest.hpp/stlab3A3Aforest_edge.md diff --git a/docs/includes/stlab/forest_algorithms.hpp/f_equal_shape.md b/docs/include/stlab/forest_algorithms.hpp/f_equal_shape.md similarity index 100% rename from docs/includes/stlab/forest_algorithms.hpp/f_equal_shape.md rename to docs/include/stlab/forest_algorithms.hpp/f_equal_shape.md diff --git a/docs/includes/stlab/forest_algorithms.hpp/f_flatten.md b/docs/include/stlab/forest_algorithms.hpp/f_flatten.md similarity index 100% rename from docs/includes/stlab/forest_algorithms.hpp/f_flatten.md rename to docs/include/stlab/forest_algorithms.hpp/f_flatten.md diff --git a/docs/includes/stlab/forest_algorithms.hpp/f_transcribe.md b/docs/include/stlab/forest_algorithms.hpp/f_transcribe.md similarity index 100% rename from docs/includes/stlab/forest_algorithms.hpp/f_transcribe.md rename to docs/include/stlab/forest_algorithms.hpp/f_transcribe.md diff --git a/docs/includes/stlab/forest_algorithms.hpp/f_transcriber.md b/docs/include/stlab/forest_algorithms.hpp/f_transcriber.md similarity index 100% rename from docs/includes/stlab/forest_algorithms.hpp/f_transcriber.md rename to docs/include/stlab/forest_algorithms.hpp/f_transcriber.md diff --git a/docs/includes/stlab/forest_algorithms.hpp/f_unflatten.md b/docs/include/stlab/forest_algorithms.hpp/f_unflatten.md similarity index 100% rename from docs/includes/stlab/forest_algorithms.hpp/f_unflatten.md rename to docs/include/stlab/forest_algorithms.hpp/f_unflatten.md diff --git a/docs/includes/stlab/forest_algorithms.hpp/index.md b/docs/include/stlab/forest_algorithms.hpp/index.md similarity index 100% rename from docs/includes/stlab/forest_algorithms.hpp/index.md rename to docs/include/stlab/forest_algorithms.hpp/index.md diff --git a/docs/includes/stlab/forest_algorithms.hpp/transcribe_iterator3CContainer3E/index.md b/docs/include/stlab/forest_algorithms.hpp/transcribe_iterator3CContainer3E/index.md similarity index 100% rename from docs/includes/stlab/forest_algorithms.hpp/transcribe_iterator3CContainer3E/index.md rename to docs/include/stlab/forest_algorithms.hpp/transcribe_iterator3CContainer3E/index.md diff --git a/docs/includes/stlab/forest_algorithms.hpp/transcribe_iterator3CContainer3E/m_operator2A.md b/docs/include/stlab/forest_algorithms.hpp/transcribe_iterator3CContainer3E/m_operator2A.md similarity index 100% rename from docs/includes/stlab/forest_algorithms.hpp/transcribe_iterator3CContainer3E/m_operator2A.md rename to docs/include/stlab/forest_algorithms.hpp/transcribe_iterator3CContainer3E/m_operator2A.md diff --git a/docs/includes/stlab/forest_algorithms.hpp/transcribe_iterator3CContainer3E/m_operator2B2B.md b/docs/include/stlab/forest_algorithms.hpp/transcribe_iterator3CContainer3E/m_operator2B2B.md similarity index 100% rename from docs/includes/stlab/forest_algorithms.hpp/transcribe_iterator3CContainer3E/m_operator2B2B.md rename to docs/include/stlab/forest_algorithms.hpp/transcribe_iterator3CContainer3E/m_operator2B2B.md diff --git a/docs/includes/stlab/forest_algorithms.hpp/transcribe_iterator3CContainer3E/m_operator3D.md b/docs/include/stlab/forest_algorithms.hpp/transcribe_iterator3CContainer3E/m_operator3D.md similarity index 100% rename from docs/includes/stlab/forest_algorithms.hpp/transcribe_iterator3CContainer3E/m_operator3D.md rename to docs/include/stlab/forest_algorithms.hpp/transcribe_iterator3CContainer3E/m_operator3D.md diff --git a/docs/includes/stlab/forest_algorithms.hpp/transcribe_iterator3CContainer3E/m_trailing.md b/docs/include/stlab/forest_algorithms.hpp/transcribe_iterator3CContainer3E/m_trailing.md similarity index 100% rename from docs/includes/stlab/forest_algorithms.hpp/transcribe_iterator3CContainer3E/m_trailing.md rename to docs/include/stlab/forest_algorithms.hpp/transcribe_iterator3CContainer3E/m_trailing.md diff --git a/docs/includes/stlab/forest_algorithms.hpp/transcribe_iterator3CContainer3E/m_transcribe_iterator3CContainer3E.md b/docs/include/stlab/forest_algorithms.hpp/transcribe_iterator3CContainer3E/m_transcribe_iterator3CContainer3E.md similarity index 100% rename from docs/includes/stlab/forest_algorithms.hpp/transcribe_iterator3CContainer3E/m_transcribe_iterator3CContainer3E.md rename to docs/include/stlab/forest_algorithms.hpp/transcribe_iterator3CContainer3E/m_transcribe_iterator3CContainer3E.md diff --git a/docs/includes/stlab/functional.hpp/f_unwrap.md b/docs/include/stlab/functional.hpp/f_unwrap.md similarity index 100% rename from docs/includes/stlab/functional.hpp/f_unwrap.md rename to docs/include/stlab/functional.hpp/f_unwrap.md diff --git a/docs/includes/stlab/functional.hpp/index.md b/docs/include/stlab/functional.hpp/index.md similarity index 100% rename from docs/includes/stlab/functional.hpp/index.md rename to docs/include/stlab/functional.hpp/index.md diff --git a/docs/includes/stlab/functional.hpp/is_reference_wrapper3CT3E/index.md b/docs/include/stlab/functional.hpp/is_reference_wrapper3CT3E/index.md similarity index 100% rename from docs/includes/stlab/functional.hpp/is_reference_wrapper3CT3E/index.md rename to docs/include/stlab/functional.hpp/is_reference_wrapper3CT3E/index.md diff --git a/docs/includes/stlab/functional.hpp/is_reference_wrapper3Cs.63c6d6bf/index.md b/docs/include/stlab/functional.hpp/is_reference_wrapper3Cs.63c6d6bf/index.md similarity index 100% rename from docs/includes/stlab/functional.hpp/is_reference_wrapper3Cs.63c6d6bf/index.md rename to docs/include/stlab/functional.hpp/is_reference_wrapper3Cs.63c6d6bf/index.md diff --git a/docs/includes/stlab/functional.hpp/unwrap_reference3CT3E/index.md b/docs/include/stlab/functional.hpp/unwrap_reference3CT3E/index.md similarity index 100% rename from docs/includes/stlab/functional.hpp/unwrap_reference3CT3E/index.md rename to docs/include/stlab/functional.hpp/unwrap_reference3CT3E/index.md diff --git a/docs/includes/stlab/functional.hpp/unwrap_reference3Cstd3A.d26820ce/index.md b/docs/include/stlab/functional.hpp/unwrap_reference3Cstd3A.d26820ce/index.md similarity index 100% rename from docs/includes/stlab/functional.hpp/unwrap_reference3Cstd3A.d26820ce/index.md rename to docs/include/stlab/functional.hpp/unwrap_reference3Cstd3A.d26820ce/index.md diff --git a/docs/includes/stlab/index.md b/docs/include/stlab/index.md similarity index 100% rename from docs/includes/stlab/index.md rename to docs/include/stlab/index.md diff --git a/docs/includes/stlab/iterator/concepts.hpp/index.md b/docs/include/stlab/iterator/concepts.hpp/index.md similarity index 100% rename from docs/includes/stlab/iterator/concepts.hpp/index.md rename to docs/include/stlab/iterator/concepts.hpp/index.md diff --git a/docs/includes/stlab/iterator/index.md b/docs/include/stlab/iterator/index.md similarity index 100% rename from docs/includes/stlab/iterator/index.md rename to docs/include/stlab/iterator/index.md diff --git a/docs/includes/stlab/iterator/set_next.hpp/f_set_next.md b/docs/include/stlab/iterator/set_next.hpp/f_set_next.md similarity index 100% rename from docs/includes/stlab/iterator/set_next.hpp/f_set_next.md rename to docs/include/stlab/iterator/set_next.hpp/f_set_next.md diff --git a/docs/includes/stlab/iterator/set_next.hpp/f_skip_next_node.md b/docs/include/stlab/iterator/set_next.hpp/f_skip_next_node.md similarity index 100% rename from docs/includes/stlab/iterator/set_next.hpp/f_skip_next_node.md rename to docs/include/stlab/iterator/set_next.hpp/f_skip_next_node.md diff --git a/docs/includes/stlab/iterator/set_next.hpp/f_skip_node.md b/docs/include/stlab/iterator/set_next.hpp/f_skip_node.md similarity index 100% rename from docs/includes/stlab/iterator/set_next.hpp/f_skip_node.md rename to docs/include/stlab/iterator/set_next.hpp/f_skip_node.md diff --git a/docs/includes/stlab/iterator/set_next.hpp/f_splice_node_range.md b/docs/include/stlab/iterator/set_next.hpp/f_splice_node_range.md similarity index 100% rename from docs/includes/stlab/iterator/set_next.hpp/f_splice_node_range.md rename to docs/include/stlab/iterator/set_next.hpp/f_splice_node_range.md diff --git a/docs/includes/stlab/iterator/set_next.hpp/index.md b/docs/include/stlab/iterator/set_next.hpp/index.md similarity index 100% rename from docs/includes/stlab/iterator/set_next.hpp/index.md rename to docs/include/stlab/iterator/set_next.hpp/index.md diff --git a/docs/includes/stlab/memory.hpp/f_make_weak_ptr.md b/docs/include/stlab/memory.hpp/f_make_weak_ptr.md similarity index 100% rename from docs/includes/stlab/memory.hpp/f_make_weak_ptr.md rename to docs/include/stlab/memory.hpp/f_make_weak_ptr.md diff --git a/docs/includes/stlab/memory.hpp/index.md b/docs/include/stlab/memory.hpp/index.md similarity index 100% rename from docs/includes/stlab/memory.hpp/index.md rename to docs/include/stlab/memory.hpp/index.md diff --git a/docs/includes/stlab/pre_exit.hpp/f_at_pre_exit.md b/docs/include/stlab/pre_exit.hpp/f_at_pre_exit.md similarity index 100% rename from docs/includes/stlab/pre_exit.hpp/f_at_pre_exit.md rename to docs/include/stlab/pre_exit.hpp/f_at_pre_exit.md diff --git a/docs/includes/stlab/pre_exit.hpp/f_pre_exit.md b/docs/include/stlab/pre_exit.hpp/f_pre_exit.md similarity index 100% rename from docs/includes/stlab/pre_exit.hpp/f_pre_exit.md rename to docs/include/stlab/pre_exit.hpp/f_pre_exit.md diff --git a/docs/includes/stlab/pre_exit.hpp/index.md b/docs/include/stlab/pre_exit.hpp/index.md similarity index 100% rename from docs/includes/stlab/pre_exit.hpp/index.md rename to docs/include/stlab/pre_exit.hpp/index.md diff --git a/docs/includes/stlab/scope.hpp/f_scope.md b/docs/include/stlab/scope.hpp/f_scope.md similarity index 100% rename from docs/includes/stlab/scope.hpp/f_scope.md rename to docs/include/stlab/scope.hpp/f_scope.md diff --git a/docs/includes/stlab/scope.hpp/index.md b/docs/include/stlab/scope.hpp/index.md similarity index 100% rename from docs/includes/stlab/scope.hpp/index.md rename to docs/include/stlab/scope.hpp/index.md diff --git a/docs/includes/stlab/scope.hpp/scope_example.cpp b/docs/include/stlab/scope.hpp/scope_example.cpp similarity index 100% rename from docs/includes/stlab/scope.hpp/scope_example.cpp rename to docs/include/stlab/scope.hpp/scope_example.cpp diff --git a/docs/includes/stlab/scope.hpp/scope_example_return.cpp b/docs/include/stlab/scope.hpp/scope_example_return.cpp similarity index 100% rename from docs/includes/stlab/scope.hpp/scope_example_return.cpp rename to docs/include/stlab/scope.hpp/scope_example_return.cpp diff --git a/docs/includes/stlab/test/index.md b/docs/include/stlab/test/index.md similarity index 100% rename from docs/includes/stlab/test/index.md rename to docs/include/stlab/test/index.md diff --git a/docs/includes/stlab/test/model.hpp/annotate/annotate_rvo_example.cpp b/docs/include/stlab/test/model.hpp/annotate/annotate_rvo_example.cpp similarity index 100% rename from docs/includes/stlab/test/model.hpp/annotate/annotate_rvo_example.cpp rename to docs/include/stlab/test/model.hpp/annotate/annotate_rvo_example.cpp diff --git a/docs/includes/stlab/test/model.hpp/annotate/f_operator213D.md b/docs/include/stlab/test/model.hpp/annotate/f_operator213D.md similarity index 100% rename from docs/includes/stlab/test/model.hpp/annotate/f_operator213D.md rename to docs/include/stlab/test/model.hpp/annotate/f_operator213D.md diff --git a/docs/includes/stlab/test/model.hpp/annotate/f_operator3D3D.md b/docs/include/stlab/test/model.hpp/annotate/f_operator3D3D.md similarity index 100% rename from docs/includes/stlab/test/model.hpp/annotate/f_operator3D3D.md rename to docs/include/stlab/test/model.hpp/annotate/f_operator3D3D.md diff --git a/docs/includes/stlab/test/model.hpp/annotate/f_swap.md b/docs/include/stlab/test/model.hpp/annotate/f_swap.md similarity index 100% rename from docs/includes/stlab/test/model.hpp/annotate/f_swap.md rename to docs/include/stlab/test/model.hpp/annotate/f_swap.md diff --git a/docs/includes/stlab/test/model.hpp/annotate/index.md b/docs/include/stlab/test/model.hpp/annotate/index.md similarity index 100% rename from docs/includes/stlab/test/model.hpp/annotate/index.md rename to docs/include/stlab/test/model.hpp/annotate/index.md diff --git a/docs/includes/stlab/test/model.hpp/annotate/m_annotate.md b/docs/include/stlab/test/model.hpp/annotate/m_annotate.md similarity index 100% rename from docs/includes/stlab/test/model.hpp/annotate/m_annotate.md rename to docs/include/stlab/test/model.hpp/annotate/m_annotate.md diff --git a/docs/includes/stlab/test/model.hpp/annotate/m_operator3D.md b/docs/include/stlab/test/model.hpp/annotate/m_operator3D.md similarity index 100% rename from docs/includes/stlab/test/model.hpp/annotate/m_operator3D.md rename to docs/include/stlab/test/model.hpp/annotate/m_operator3D.md diff --git a/docs/includes/stlab/test/model.hpp/annotate/m_~annotate.md b/docs/include/stlab/test/model.hpp/annotate/m_~annotate.md similarity index 100% rename from docs/includes/stlab/test/model.hpp/annotate/m_~annotate.md rename to docs/include/stlab/test/model.hpp/annotate/m_~annotate.md diff --git a/docs/includes/stlab/test/model.hpp/annotate_counters/f_operator3C3C.md b/docs/include/stlab/test/model.hpp/annotate_counters/f_operator3C3C.md similarity index 100% rename from docs/includes/stlab/test/model.hpp/annotate_counters/f_operator3C3C.md rename to docs/include/stlab/test/model.hpp/annotate_counters/f_operator3C3C.md diff --git a/docs/includes/stlab/test/model.hpp/annotate_counters/index.md b/docs/include/stlab/test/model.hpp/annotate_counters/index.md similarity index 100% rename from docs/includes/stlab/test/model.hpp/annotate_counters/index.md rename to docs/include/stlab/test/model.hpp/annotate_counters/index.md diff --git a/docs/includes/stlab/test/model.hpp/annotate_counters/m_annotate_counters.md b/docs/include/stlab/test/model.hpp/annotate_counters/m_annotate_counters.md similarity index 100% rename from docs/includes/stlab/test/model.hpp/annotate_counters/m_annotate_counters.md rename to docs/include/stlab/test/model.hpp/annotate_counters/m_annotate_counters.md diff --git a/docs/includes/stlab/test/model.hpp/annotate_counters/m_operator3D.md b/docs/include/stlab/test/model.hpp/annotate_counters/m_operator3D.md similarity index 100% rename from docs/includes/stlab/test/model.hpp/annotate_counters/m_operator3D.md rename to docs/include/stlab/test/model.hpp/annotate_counters/m_operator3D.md diff --git a/docs/includes/stlab/test/model.hpp/annotate_counters/m_remaining.md b/docs/include/stlab/test/model.hpp/annotate_counters/m_remaining.md similarity index 100% rename from docs/includes/stlab/test/model.hpp/annotate_counters/m_remaining.md rename to docs/include/stlab/test/model.hpp/annotate_counters/m_remaining.md diff --git a/docs/includes/stlab/test/model.hpp/annotate_counters/m_wait.md b/docs/include/stlab/test/model.hpp/annotate_counters/m_wait.md similarity index 100% rename from docs/includes/stlab/test/model.hpp/annotate_counters/m_wait.md rename to docs/include/stlab/test/model.hpp/annotate_counters/m_wait.md diff --git a/docs/includes/stlab/test/model.hpp/annotate_counters/m_~annotate_counters.md b/docs/include/stlab/test/model.hpp/annotate_counters/m_~annotate_counters.md similarity index 100% rename from docs/includes/stlab/test/model.hpp/annotate_counters/m_~annotate_counters.md rename to docs/include/stlab/test/model.hpp/annotate_counters/m_~annotate_counters.md diff --git a/docs/includes/stlab/test/model.hpp/index.md b/docs/include/stlab/test/model.hpp/index.md similarity index 100% rename from docs/includes/stlab/test/model.hpp/index.md rename to docs/include/stlab/test/model.hpp/index.md diff --git a/docs/includes/stlab/test/model.hpp/move_only/index.md b/docs/include/stlab/test/model.hpp/move_only/index.md similarity index 100% rename from docs/includes/stlab/test/model.hpp/move_only/index.md rename to docs/include/stlab/test/model.hpp/move_only/index.md diff --git a/docs/includes/stlab/test/model.hpp/move_only/m_member.md b/docs/include/stlab/test/model.hpp/move_only/m_member.md similarity index 100% rename from docs/includes/stlab/test/model.hpp/move_only/m_member.md rename to docs/include/stlab/test/model.hpp/move_only/m_member.md diff --git a/docs/includes/stlab/test/model.hpp/move_only/m_move_only.md b/docs/include/stlab/test/model.hpp/move_only/m_move_only.md similarity index 100% rename from docs/includes/stlab/test/model.hpp/move_only/m_move_only.md rename to docs/include/stlab/test/model.hpp/move_only/m_move_only.md diff --git a/docs/includes/stlab/test/model.hpp/move_only/m_operator3D.md b/docs/include/stlab/test/model.hpp/move_only/m_operator3D.md similarity index 100% rename from docs/includes/stlab/test/model.hpp/move_only/m_operator3D.md rename to docs/include/stlab/test/model.hpp/move_only/m_operator3D.md diff --git a/docs/includes/stlab/test/model.hpp/move_only/m_~move_only.md b/docs/include/stlab/test/model.hpp/move_only/m_~move_only.md similarity index 100% rename from docs/includes/stlab/test/model.hpp/move_only/m_~move_only.md rename to docs/include/stlab/test/model.hpp/move_only/m_~move_only.md diff --git a/docs/includes/stlab/test/model.hpp/move_only/move_only_rvo_example.cpp b/docs/include/stlab/test/model.hpp/move_only/move_only_rvo_example.cpp similarity index 100% rename from docs/includes/stlab/test/model.hpp/move_only/move_only_rvo_example.cpp rename to docs/include/stlab/test/model.hpp/move_only/move_only_rvo_example.cpp diff --git a/docs/includes/stlab/test/model.hpp/regular/f_operator3C.md b/docs/include/stlab/test/model.hpp/regular/f_operator3C.md similarity index 100% rename from docs/includes/stlab/test/model.hpp/regular/f_operator3C.md rename to docs/include/stlab/test/model.hpp/regular/f_operator3C.md diff --git a/docs/includes/stlab/test/model.hpp/regular/index.md b/docs/include/stlab/test/model.hpp/regular/index.md similarity index 100% rename from docs/includes/stlab/test/model.hpp/regular/index.md rename to docs/include/stlab/test/model.hpp/regular/index.md diff --git a/docs/includes/stlab/test/model.hpp/regular/m_operator3D.md b/docs/include/stlab/test/model.hpp/regular/m_operator3D.md similarity index 100% rename from docs/includes/stlab/test/model.hpp/regular/m_operator3D.md rename to docs/include/stlab/test/model.hpp/regular/m_operator3D.md diff --git a/docs/includes/stlab/test/model.hpp/regular/m_regular.md b/docs/include/stlab/test/model.hpp/regular/m_regular.md similarity index 100% rename from docs/includes/stlab/test/model.hpp/regular/m_regular.md rename to docs/include/stlab/test/model.hpp/regular/m_regular.md diff --git a/docs/includes/stlab/test/model.hpp/regular/m_~regular.md b/docs/include/stlab/test/model.hpp/regular/m_~regular.md similarity index 100% rename from docs/includes/stlab/test/model.hpp/regular/m_~regular.md rename to docs/include/stlab/test/model.hpp/regular/m_~regular.md diff --git a/docs/includes/stlab/test/model.hpp/regular/regular_example.cpp b/docs/include/stlab/test/model.hpp/regular/regular_example.cpp similarity index 100% rename from docs/includes/stlab/test/model.hpp/regular/regular_example.cpp rename to docs/include/stlab/test/model.hpp/regular/regular_example.cpp diff --git a/docs/includes/stlab/utility.hpp/f_copy.md b/docs/include/stlab/utility.hpp/f_copy.md similarity index 100% rename from docs/includes/stlab/utility.hpp/f_copy.md rename to docs/include/stlab/utility.hpp/f_copy.md diff --git a/docs/includes/stlab/utility.hpp/f_for_each_argument.md b/docs/include/stlab/utility.hpp/f_for_each_argument.md similarity index 100% rename from docs/includes/stlab/utility.hpp/f_for_each_argument.md rename to docs/include/stlab/utility.hpp/f_for_each_argument.md diff --git a/docs/includes/stlab/utility.hpp/f_move.md b/docs/include/stlab/utility.hpp/f_move.md similarity index 100% rename from docs/includes/stlab/utility.hpp/f_move.md rename to docs/include/stlab/utility.hpp/f_move.md diff --git a/docs/includes/stlab/utility.hpp/f_move_if.md b/docs/include/stlab/utility.hpp/f_move_if.md similarity index 100% rename from docs/includes/stlab/utility.hpp/f_move_if.md rename to docs/include/stlab/utility.hpp/f_move_if.md diff --git a/docs/includes/stlab/utility.hpp/for_each_argument_example.cpp b/docs/include/stlab/utility.hpp/for_each_argument_example.cpp similarity index 100% rename from docs/includes/stlab/utility.hpp/for_each_argument_example.cpp rename to docs/include/stlab/utility.hpp/for_each_argument_example.cpp diff --git a/docs/includes/stlab/utility.hpp/index.md b/docs/include/stlab/utility.hpp/index.md similarity index 100% rename from docs/includes/stlab/utility.hpp/index.md rename to docs/include/stlab/utility.hpp/index.md diff --git a/docs/includes/stlab/utility.hpp/index_sequence_cat3Cstd.a7253ebe/index.md b/docs/include/stlab/utility.hpp/index_sequence_cat3Cstd.a7253ebe/index.md similarity index 100% rename from docs/includes/stlab/utility.hpp/index_sequence_cat3Cstd.a7253ebe/index.md rename to docs/include/stlab/utility.hpp/index_sequence_cat3Cstd.a7253ebe/index.md diff --git a/docs/includes/stlab/utility.hpp/index_sequence_to_array.aa88b8ea/index.md b/docs/include/stlab/utility.hpp/index_sequence_to_array.aa88b8ea/index.md similarity index 100% rename from docs/includes/stlab/utility.hpp/index_sequence_to_array.aa88b8ea/index.md rename to docs/include/stlab/utility.hpp/index_sequence_to_array.aa88b8ea/index.md diff --git a/docs/includes/stlab/utility.hpp/index_sequence_transfor.3fb0d0a1/index.md b/docs/include/stlab/utility.hpp/index_sequence_transfor.3fb0d0a1/index.md similarity index 100% rename from docs/includes/stlab/utility.hpp/index_sequence_transfor.3fb0d0a1/index.md rename to docs/include/stlab/utility.hpp/index_sequence_transfor.3fb0d0a1/index.md diff --git a/docs/includes/stlab/utility.hpp/index_sequence_transfor.e996655e/index.md b/docs/include/stlab/utility.hpp/index_sequence_transfor.e996655e/index.md similarity index 100% rename from docs/includes/stlab/utility.hpp/index_sequence_transfor.e996655e/index.md rename to docs/include/stlab/utility.hpp/index_sequence_transfor.e996655e/index.md diff --git a/docs/includes/stlab/utility.hpp/index_sequence_transfor.eee092e1/index.md b/docs/include/stlab/utility.hpp/index_sequence_transfor.eee092e1/index.md similarity index 100% rename from docs/includes/stlab/utility.hpp/index_sequence_transfor.eee092e1/index.md rename to docs/include/stlab/utility.hpp/index_sequence_transfor.eee092e1/index.md diff --git a/docs/includes/stlab/version.hpp/index.md b/docs/include/stlab/version.hpp/index.md similarity index 100% rename from docs/includes/stlab/version.hpp/index.md rename to docs/include/stlab/version.hpp/index.md From 7645d5b4c74de6dcba00cd1e0ac5948f818eb548 Mon Sep 17 00:00:00 2001 From: Sean Parent Date: Fri, 17 Jan 2025 13:32:41 -0800 Subject: [PATCH 07/14] hyde updated docs (reviewed). --- .../channel.hpp/f_merge_channel.md | 4 +-- .../stlab/concurrency/channel.hpp/f_zip.md | 6 ++-- .../concurrency/channel.hpp/f_zip_with.md | 6 ++-- .../stlab/concurrency/future.hpp/f_async.md | 14 +++++--- .../concurrency/future.hpp/f_when_all.md | 12 +++---- .../concurrency/future.hpp/f_when_any.md | 16 ++++----- .../m_operator5E.md | 16 ++++----- .../m_operator7C.md | 16 ++++----- .../m_recover.md | 16 ++++----- .../m_then.md | 16 ++++----- .../m_operator5E.md | 8 ++--- .../m_operator7C.md | 8 ++--- .../m_recover.md | 8 ++--- .../m_then.md | 8 ++--- .../future.hpp/make_when_any3CT3E/index.md | 2 +- .../future.hpp/make_when_any3CT3E/m_make.md | 6 ++-- .../make_when_any3Cvoid3E/m_make.md | 6 ++-- .../future.hpp/packaged_task/f_package.md | 4 +-- .../future.hpp/packaged_task3CArgs3E/index.md | 2 +- .../packaged_task3CArgs3E/m_operator2829.md | 4 +-- .../f_make_exceptional_future.md | 6 ++-- .../model3CF2C20true3E/m_invoke.md | 4 +-- .../m_child_iterator3CI3E.md | 6 ++-- .../m_edge_iterator3CI2C20Edge3E.md | 8 ++--- .../stlab/forest.hpp/forest3CT3E/m_insert.md | 8 ++--- .../stlab/forest.hpp/forest3CT3E/m_splice.md | 34 +++++++++---------- .../m_operator2829.md | 8 ++--- .../stlab/forest_algorithms.hpp/f_flatten.md | 6 ++-- .../forest_algorithms.hpp/f_transcribe.md | 14 ++++---- .../m_transcribe_iterator3CContainer3E.md | 6 ++-- .../stlab/iterator/set_next.hpp/f_set_next.md | 8 ++--- 31 files changed, 146 insertions(+), 140 deletions(-) diff --git a/docs/include/stlab/concurrency/channel.hpp/f_merge_channel.md b/docs/include/stlab/concurrency/channel.hpp/f_merge_channel.md index 7416bf04..3acd9af8 100644 --- a/docs/include/stlab/concurrency/channel.hpp/f_merge_channel.md +++ b/docs/include/stlab/concurrency/channel.hpp/f_merge_channel.md @@ -11,7 +11,7 @@ hyde: - "***********************************************************************************************" defined_in_file: stlab/concurrency/channel.hpp overloads: - "template \nauto merge_channel(S, F, R...)": + "template \nauto merge_channel(S, F, R &&...)": arguments: - description: Executor which is used to schedule the resulting task name: s @@ -27,7 +27,7 @@ hyde: description: - "***********************************************************************************************" return: a receiver that merges all passed arguments - signature_with_names: "template \nauto merge_channel(S s, F f, R... upstream_receiver)" + signature_with_names: "template \nauto merge_channel(S s, F f, R &&... upstream_receiver)" namespace: - stlab - v3 diff --git a/docs/include/stlab/concurrency/channel.hpp/f_zip.md b/docs/include/stlab/concurrency/channel.hpp/f_zip.md index 845d76b9..4894f864 100644 --- a/docs/include/stlab/concurrency/channel.hpp/f_zip.md +++ b/docs/include/stlab/concurrency/channel.hpp/f_zip.md @@ -11,20 +11,20 @@ hyde: - "***********************************************************************************************" defined_in_file: stlab/concurrency/channel.hpp overloads: - "template \nauto zip(S, R...)": + "template \nauto zip(S, const R &...)": arguments: - description: Executor which is used to schedule the resulting task name: s type: S - description: The upstream receiver(s). name: r - type: R... + type: const R &... description: Creates a receiver of type `tuple` where `T...` are the `result_type`s of the passed `upstream_receiver`. Whenever a complete set of values from each upstream receiver has arrived, it passes the tuple with the values downstream. inline: description: - "***********************************************************************************************" return: a `tuple` where `T...` are the `result_types` of all `upstream_receiver`. - signature_with_names: "template \nauto zip(S s, R... r)" + signature_with_names: "template \nauto zip(S s, const R &... r)" namespace: - stlab - v3 diff --git a/docs/include/stlab/concurrency/channel.hpp/f_zip_with.md b/docs/include/stlab/concurrency/channel.hpp/f_zip_with.md index cef6dfc0..cd702e3d 100644 --- a/docs/include/stlab/concurrency/channel.hpp/f_zip_with.md +++ b/docs/include/stlab/concurrency/channel.hpp/f_zip_with.md @@ -11,7 +11,7 @@ hyde: - "***********************************************************************************************" defined_in_file: stlab/concurrency/channel.hpp overloads: - "template \nauto zip_with(S, F, R...)": + "template \nauto zip_with(S, F, const R &...)": arguments: - description: Executor which shall be used to combine the upstream values. name: s @@ -21,13 +21,13 @@ hyde: type: F - description: The upstream receiver. name: upstream_receiver - type: R... + type: const R &... description: Creates a new receiver. The values coming from the upstream receiver collected and when from each upstream receiver a values is available, then it passes them to the process `f`. inline: description: - "***********************************************************************************************" return: a `receiver` where `T is the result type of `f` - signature_with_names: "template \nauto zip_with(S s, F f, R... upstream_receiver)" + signature_with_names: "template \nauto zip_with(S s, F f, const R &... upstream_receiver)" namespace: - stlab - v3 diff --git a/docs/include/stlab/concurrency/future.hpp/f_async.md b/docs/include/stlab/concurrency/future.hpp/f_async.md index d4ac891e..04076933 100644 --- a/docs/include/stlab/concurrency/future.hpp/f_async.md +++ b/docs/include/stlab/concurrency/future.hpp/f_async.md @@ -6,22 +6,28 @@ hyde: brief: Creates a future running on a given executor tags: - function + inline: + brief: + - "***********************************************************************************************" defined_in_file: stlab/concurrency/future.hpp overloads: - "template \nauto async(E, F &&, Args &&...) -> detail::reduced_t, std::decay_t...>>": + "template \nauto async(const E &, F &&, Args &&...) -> detail::reduced_t, std::decay_t...>>": arguments: - description: __OPTIONAL__ name: executor - type: E + type: const E & - description: __OPTIONAL__ name: f type: F && - description: __OPTIONAL__ name: args type: Args &&... - description: __OPTIONAL__ + description: __INLINED__ + inline: + description: + - "***********************************************************************************************" return: __OPTIONAL__ - signature_with_names: "template \nauto async(E executor, F && f, Args &&... args) -> detail::reduced_t, std::decay_t...>>" + signature_with_names: "template \nauto async(const E & executor, F && f, Args &&... args) -> detail::reduced_t, std::decay_t...>>" namespace: - stlab - v3 diff --git a/docs/include/stlab/concurrency/future.hpp/f_when_all.md b/docs/include/stlab/concurrency/future.hpp/f_when_all.md index f9f16655..0c08081a 100644 --- a/docs/include/stlab/concurrency/future.hpp/f_when_all.md +++ b/docs/include/stlab/concurrency/future.hpp/f_when_all.md @@ -10,11 +10,11 @@ hyde: brief: _multiple descriptions_ defined_in_file: stlab/concurrency/future.hpp overloads: - "template \nauto when_all(E, F, std::pair)": + "template \nauto when_all(const E &, F, std::pair)": arguments: - description: Executor which is used to schedule the resulting task name: executor - type: E + type: const E & - description: Callable object that implements the continuing task name: f type: F @@ -26,12 +26,12 @@ hyde: description: - "***********************************************************************************************" return: __OPTIONAL__ - signature_with_names: "template \nauto when_all(E executor, F f, std::pair range)" - "template \nauto when_all(E, F, future...)": + signature_with_names: "template \nauto when_all(const E & executor, F f, std::pair range)" + "template \nauto when_all(const E &, F, future...)": arguments: - description: Executor which is used to schedule the resulting task name: executor - type: E + type: const E & - description: Callable object that implements the continuing task name: f type: F @@ -43,7 +43,7 @@ hyde: description: - "***********************************************************************************************" return: The continuation on the group of passed futures. - signature_with_names: "template \nauto when_all(E executor, F f, future... args)" + signature_with_names: "template \nauto when_all(const E & executor, F f, future... args)" namespace: - stlab - v3 diff --git a/docs/include/stlab/concurrency/future.hpp/f_when_any.md b/docs/include/stlab/concurrency/future.hpp/f_when_any.md index 76ecc714..a0444bba 100644 --- a/docs/include/stlab/concurrency/future.hpp/f_when_any.md +++ b/docs/include/stlab/concurrency/future.hpp/f_when_any.md @@ -10,11 +10,11 @@ hyde: brief: _multiple descriptions_ defined_in_file: stlab/concurrency/future.hpp overloads: - "template \nauto when_any(E, F &&, std::pair)": + "template \nauto when_any(const E &, F &&, std::pair)": arguments: - description: Executor which is used to schedule the resulting task name: executor - type: E + type: const E & - description: Callable object that implements the continuing task name: f type: F && @@ -26,27 +26,27 @@ hyde: description: - "***********************************************************************************************" return: __OPTIONAL__ - signature_with_names: "template \nauto when_any(E executor, F && f, std::pair range)" - "template \nauto when_any(E, F &&, future, future...)": + signature_with_names: "template \nauto when_any(const E & executor, F && f, std::pair range)" + "template \nauto when_any(E &&, F &&, future &&, future &&...)": arguments: - description: Executor which is used to schedule the resulting task name: executor - type: E + type: E && - description: Callable object that implements the continuing task name: f type: F && - description: __OPTIONAL__ name: arg - type: future + type: future && - description: __OPTIONAL__ name: args - type: future... + type: future &&... description: __INLINED__ inline: description: - "***********************************************************************************************" return: __OPTIONAL__ - signature_with_names: "template \nauto when_any(E executor, F && f, future arg, future... args)" + signature_with_names: "template \nauto when_any(E && executor, F && f, future && arg, future &&... args)" namespace: - stlab - v3 diff --git a/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_operator5E.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_operator5E.md index 7d5d94d4..884b049e 100644 --- a/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_operator5E.md +++ b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_operator5E.md @@ -8,36 +8,36 @@ hyde: - method defined_in_file: stlab/concurrency/future.hpp overloads: - "template \nauto operator^(F &&) &&": + "template \nauto operator^(F &&) &&": arguments: - description: __OPTIONAL__ name: f type: F && description: __MISSING__ return: __OPTIONAL__ - signature_with_names: "template \nauto operator^(F && f) &&" - "template \nauto operator^(F &&) const &": + signature_with_names: "template \nauto operator^(F && f) &&" + "template \nauto operator^(F &&) const &": arguments: - description: __OPTIONAL__ name: f type: F && description: __MISSING__ return: __OPTIONAL__ - signature_with_names: "template \nauto operator^(F && f) const &" - "template \nauto operator^(executor_task_pair) &&": + signature_with_names: "template \nauto operator^(F && f) const &" + "template \nauto operator^(executor_task_pair) &&": arguments: - description: __OPTIONAL__ name: etp type: executor_task_pair description: __MISSING__ return: __OPTIONAL__ - signature_with_names: "template \nauto operator^(executor_task_pair etp) &&" - "template \nauto operator^(executor_task_pair) const &": + signature_with_names: "template \nauto operator^(executor_task_pair etp) &&" + "template \nauto operator^(executor_task_pair) const &": arguments: - description: __OPTIONAL__ name: etp type: executor_task_pair description: __MISSING__ return: __OPTIONAL__ - signature_with_names: "template \nauto operator^(executor_task_pair etp) const &" + signature_with_names: "template \nauto operator^(executor_task_pair etp) const &" --- diff --git a/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_operator7C.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_operator7C.md index 84a013da..3ff6abf3 100644 --- a/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_operator7C.md +++ b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_operator7C.md @@ -8,36 +8,36 @@ hyde: - method defined_in_file: stlab/concurrency/future.hpp overloads: - "template \nauto operator|(F &&) &&": + "template \nauto operator|(F &&) &&": arguments: - description: __OPTIONAL__ name: f type: F && description: __MISSING__ return: __OPTIONAL__ - signature_with_names: "template \nauto operator|(F && f) &&" - "template \nauto operator|(F &&) const &": + signature_with_names: "template \nauto operator|(F && f) &&" + "template \nauto operator|(F &&) const &": arguments: - description: __OPTIONAL__ name: f type: F && description: __MISSING__ return: __OPTIONAL__ - signature_with_names: "template \nauto operator|(F && f) const &" - "template \nauto operator|(executor_task_pair) &&": + signature_with_names: "template \nauto operator|(F && f) const &" + "template \nauto operator|(executor_task_pair) &&": arguments: - description: __OPTIONAL__ name: etp type: executor_task_pair description: __MISSING__ return: __OPTIONAL__ - signature_with_names: "template \nauto operator|(executor_task_pair etp) &&" - "template \nauto operator|(executor_task_pair) const &": + signature_with_names: "template \nauto operator|(executor_task_pair etp) &&" + "template \nauto operator|(executor_task_pair) const &": arguments: - description: __OPTIONAL__ name: etp type: executor_task_pair description: __MISSING__ return: __OPTIONAL__ - signature_with_names: "template \nauto operator|(executor_task_pair etp) const &" + signature_with_names: "template \nauto operator|(executor_task_pair etp) const &" --- diff --git a/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_recover.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_recover.md index 1e557c2b..a57aebcb 100644 --- a/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_recover.md +++ b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_recover.md @@ -8,7 +8,7 @@ hyde: - method defined_in_file: stlab/concurrency/future.hpp overloads: - "template \nauto recover(E &&, F &&) &&": + "template \nauto recover(E &&, F &&) &&": arguments: - description: __OPTIONAL__ name: executor @@ -18,8 +18,8 @@ hyde: type: F && description: __MISSING__ return: __OPTIONAL__ - signature_with_names: "template \nauto recover(E && executor, F && f) &&" - "template \nauto recover(E &&, F &&) const &": + signature_with_names: "template \nauto recover(E && executor, F && f) &&" + "template \nauto recover(E &&, F &&) const &": arguments: - description: __OPTIONAL__ name: executor @@ -29,21 +29,21 @@ hyde: type: F && description: __MISSING__ return: __OPTIONAL__ - signature_with_names: "template \nauto recover(E && executor, F && f) const &" - "template \nauto recover(F &&) &&": + signature_with_names: "template \nauto recover(E && executor, F && f) const &" + "template \nauto recover(F &&) &&": arguments: - description: __OPTIONAL__ name: f type: F && description: __MISSING__ return: __OPTIONAL__ - signature_with_names: "template \nauto recover(F && f) &&" - "template \nauto recover(F &&) const &": + signature_with_names: "template \nauto recover(F && f) &&" + "template \nauto recover(F &&) const &": arguments: - description: __OPTIONAL__ name: f type: F && description: __MISSING__ return: __OPTIONAL__ - signature_with_names: "template \nauto recover(F && f) const &" + signature_with_names: "template \nauto recover(F && f) const &" --- diff --git a/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_then.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_then.md index 8d063052..fa4e3966 100644 --- a/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_then.md +++ b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.53f3cff2/m_then.md @@ -8,7 +8,7 @@ hyde: - method defined_in_file: stlab/concurrency/future.hpp overloads: - "template \nauto then(E &&, F &&) &&": + "template \nauto then(E &&, F &&) &&": arguments: - description: __OPTIONAL__ name: executor @@ -18,8 +18,8 @@ hyde: type: F && description: __MISSING__ return: __OPTIONAL__ - signature_with_names: "template \nauto then(E && executor, F && f) &&" - "template \nauto then(E &&, F &&) const &": + signature_with_names: "template \nauto then(E && executor, F && f) &&" + "template \nauto then(E &&, F &&) const &": arguments: - description: __OPTIONAL__ name: executor @@ -29,21 +29,21 @@ hyde: type: F && description: __MISSING__ return: __OPTIONAL__ - signature_with_names: "template \nauto then(E && executor, F && f) const &" - "template \nauto then(F &&) &&": + signature_with_names: "template \nauto then(E && executor, F && f) const &" + "template \nauto then(F &&) &&": arguments: - description: __OPTIONAL__ name: f type: F && description: __MISSING__ return: __OPTIONAL__ - signature_with_names: "template \nauto then(F && f) &&" - "template \nauto then(F &&) const &": + signature_with_names: "template \nauto then(F && f) &&" + "template \nauto then(F &&) const &": arguments: - description: __OPTIONAL__ name: f type: F && description: __MISSING__ return: __OPTIONAL__ - signature_with_names: "template \nauto then(F && f) const &" + signature_with_names: "template \nauto then(F && f) const &" --- diff --git a/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_operator5E.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_operator5E.md index 25557db3..0554705c 100644 --- a/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_operator5E.md +++ b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_operator5E.md @@ -8,20 +8,20 @@ hyde: - method defined_in_file: stlab/concurrency/future.hpp overloads: - "template \nauto operator^(F &&) &&": + "template \nauto operator^(F &&) &&": arguments: - description: __OPTIONAL__ name: f type: F && description: __MISSING__ return: __OPTIONAL__ - signature_with_names: "template \nauto operator^(F && f) &&" - "template \nauto operator^(executor_task_pair) &&": + signature_with_names: "template \nauto operator^(F && f) &&" + "template \nauto operator^(executor_task_pair) &&": arguments: - description: __OPTIONAL__ name: etp type: executor_task_pair description: __MISSING__ return: __OPTIONAL__ - signature_with_names: "template \nauto operator^(executor_task_pair etp) &&" + signature_with_names: "template \nauto operator^(executor_task_pair etp) &&" --- diff --git a/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_operator7C.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_operator7C.md index 9e598dbc..d75d6bae 100644 --- a/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_operator7C.md +++ b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_operator7C.md @@ -8,20 +8,20 @@ hyde: - method defined_in_file: stlab/concurrency/future.hpp overloads: - "template \nauto operator|(F &&) &&": + "template \nauto operator|(F &&) &&": arguments: - description: __OPTIONAL__ name: f type: F && description: __MISSING__ return: __OPTIONAL__ - signature_with_names: "template \nauto operator|(F && f) &&" - "template \nauto operator|(executor_task_pair) &&": + signature_with_names: "template \nauto operator|(F && f) &&" + "template \nauto operator|(executor_task_pair) &&": arguments: - description: __OPTIONAL__ name: etp type: executor_task_pair description: __MISSING__ return: __OPTIONAL__ - signature_with_names: "template \nauto operator|(executor_task_pair etp) &&" + signature_with_names: "template \nauto operator|(executor_task_pair etp) &&" --- diff --git a/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_recover.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_recover.md index e8251cc6..88454593 100644 --- a/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_recover.md +++ b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_recover.md @@ -8,7 +8,7 @@ hyde: - method defined_in_file: stlab/concurrency/future.hpp overloads: - "template \nauto recover(E &&, F &&) &&": + "template \nauto recover(E &&, F &&) &&": arguments: - description: __OPTIONAL__ name: executor @@ -18,13 +18,13 @@ hyde: type: F && description: __MISSING__ return: __OPTIONAL__ - signature_with_names: "template \nauto recover(E && executor, F && f) &&" - "template \nauto recover(F &&) &&": + signature_with_names: "template \nauto recover(E && executor, F && f) &&" + "template \nauto recover(F &&) &&": arguments: - description: __OPTIONAL__ name: f type: F && description: __MISSING__ return: __OPTIONAL__ - signature_with_names: "template \nauto recover(F && f) &&" + signature_with_names: "template \nauto recover(F && f) &&" --- diff --git a/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_then.md b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_then.md index 63147649..c6f789e0 100644 --- a/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_then.md +++ b/docs/include/stlab/concurrency/future.hpp/future3CT2C20enable_if_.a37aab7c/m_then.md @@ -8,7 +8,7 @@ hyde: - method defined_in_file: stlab/concurrency/future.hpp overloads: - "template \nauto then(E &&, F &&) &&": + "template \nauto then(E &&, F &&) &&": arguments: - description: __OPTIONAL__ name: executor @@ -18,13 +18,13 @@ hyde: type: F && description: __MISSING__ return: __OPTIONAL__ - signature_with_names: "template \nauto then(E && executor, F && f) &&" - "template \nauto then(F &&) &&": + signature_with_names: "template \nauto then(E && executor, F && f) &&" + "template \nauto then(F &&) &&": arguments: - description: __OPTIONAL__ name: f type: F && description: __MISSING__ return: __OPTIONAL__ - signature_with_names: "template \nauto then(F && f) &&" + signature_with_names: "template \nauto then(F && f) &&" --- diff --git a/docs/include/stlab/concurrency/future.hpp/make_when_any3CT3E/index.md b/docs/include/stlab/concurrency/future.hpp/make_when_any3CT3E/index.md index 43b8f0f5..8ec72516 100644 --- a/docs/include/stlab/concurrency/future.hpp/make_when_any3CT3E/index.md +++ b/docs/include/stlab/concurrency/future.hpp/make_when_any3CT3E/index.md @@ -10,7 +10,7 @@ hyde: description: - "***********************************************************************************************" defined_in_file: stlab/concurrency/future.hpp - declaration: "template \nstruct stlab::make_when_any;" + declaration: "template \nstruct stlab::make_when_any;" ctor: unspecified dtor: unspecified namespace: diff --git a/docs/include/stlab/concurrency/future.hpp/make_when_any3CT3E/m_make.md b/docs/include/stlab/concurrency/future.hpp/make_when_any3CT3E/m_make.md index 9b473e29..d8315754 100644 --- a/docs/include/stlab/concurrency/future.hpp/make_when_any3CT3E/m_make.md +++ b/docs/include/stlab/concurrency/future.hpp/make_when_any3CT3E/m_make.md @@ -8,11 +8,11 @@ hyde: - method defined_in_file: stlab/concurrency/future.hpp overloads: - "template \nstatic auto make(E, F, future, future...)": + "template \nstatic auto make(const E &, F, future, future...)": arguments: - description: __OPTIONAL__ name: executor - type: E + type: const E & - description: __OPTIONAL__ name: f type: F @@ -24,5 +24,5 @@ hyde: type: future... description: __OPTIONAL__ return: __OPTIONAL__ - signature_with_names: "template \nstatic auto make(E executor, F f, future arg, future... args)" + signature_with_names: "template \nstatic auto make(const E & executor, F f, future arg, future... args)" --- diff --git a/docs/include/stlab/concurrency/future.hpp/make_when_any3Cvoid3E/m_make.md b/docs/include/stlab/concurrency/future.hpp/make_when_any3Cvoid3E/m_make.md index 484741c9..dabb0c29 100644 --- a/docs/include/stlab/concurrency/future.hpp/make_when_any3Cvoid3E/m_make.md +++ b/docs/include/stlab/concurrency/future.hpp/make_when_any3Cvoid3E/m_make.md @@ -8,11 +8,11 @@ hyde: - method defined_in_file: stlab/concurrency/future.hpp overloads: - "template \nstatic auto make(E, F &&, future...)": + "template \nstatic auto make(E &&, F &&, future...)": arguments: - description: __OPTIONAL__ name: executor - type: E + type: E && - description: __OPTIONAL__ name: f type: F && @@ -21,5 +21,5 @@ hyde: type: future... description: __OPTIONAL__ return: __OPTIONAL__ - signature_with_names: "template \nstatic auto make(E executor, F && f, future... args)" + signature_with_names: "template \nstatic auto make(E && executor, F && f, future... args)" --- diff --git a/docs/include/stlab/concurrency/future.hpp/packaged_task/f_package.md b/docs/include/stlab/concurrency/future.hpp/packaged_task/f_package.md index 88dc31e6..b560944b 100644 --- a/docs/include/stlab/concurrency/future.hpp/packaged_task/f_package.md +++ b/docs/include/stlab/concurrency/future.hpp/packaged_task/f_package.md @@ -10,7 +10,7 @@ hyde: brief: _multiple descriptions_ defined_in_file: stlab/concurrency/future.hpp overloads: - "template \nauto package(E, F &&) -> std::pair, detail::reduced_result_t>": + "template \nauto package(E, F &&) -> std::pair, detail::reduced_result_t>": arguments: - description: __OPTIONAL__ name: executor @@ -25,7 +25,7 @@ hyde: description: - "***********************************************************************************************" return: __OPTIONAL__ - signature_with_names: "template \nauto package(E executor, F && f) -> std::pair, detail::reduced_result_t>" + signature_with_names: "template \nauto package(E executor, F && f) -> std::pair, detail::reduced_result_t>" namespace: - stlab - v3 diff --git a/docs/include/stlab/concurrency/future.hpp/packaged_task3CArgs3E/index.md b/docs/include/stlab/concurrency/future.hpp/packaged_task3CArgs3E/index.md index b7ee3c93..e7896781 100644 --- a/docs/include/stlab/concurrency/future.hpp/packaged_task3CArgs3E/index.md +++ b/docs/include/stlab/concurrency/future.hpp/packaged_task3CArgs3E/index.md @@ -10,7 +10,7 @@ hyde: description: - "***********************************************************************************************" defined_in_file: stlab/concurrency/future.hpp - declaration: "template \nclass stlab::packaged_task;" + declaration: "template \nclass stlab::packaged_task;" namespace: - stlab - v3 diff --git a/docs/include/stlab/concurrency/future.hpp/packaged_task3CArgs3E/m_operator2829.md b/docs/include/stlab/concurrency/future.hpp/packaged_task3CArgs3E/m_operator2829.md index abcb26e3..5327d4b2 100644 --- a/docs/include/stlab/concurrency/future.hpp/packaged_task3CArgs3E/m_operator2829.md +++ b/docs/include/stlab/concurrency/future.hpp/packaged_task3CArgs3E/m_operator2829.md @@ -8,12 +8,12 @@ hyde: - method defined_in_file: stlab/concurrency/future.hpp overloads: - "template \nvoid operator()(A &&...)": + "template \nvoid operator()(A &&...)": arguments: - description: __OPTIONAL__ name: args type: A &&... description: __OPTIONAL__ return: __OPTIONAL__ - signature_with_names: "template \nvoid operator()(A &&... args)" + signature_with_names: "template \nvoid operator()(A &&... args)" --- diff --git a/docs/include/stlab/concurrency/ready_future.hpp/f_make_exceptional_future.md b/docs/include/stlab/concurrency/ready_future.hpp/f_make_exceptional_future.md index 65ba40c5..fead632f 100644 --- a/docs/include/stlab/concurrency/ready_future.hpp/f_make_exceptional_future.md +++ b/docs/include/stlab/concurrency/ready_future.hpp/f_make_exceptional_future.md @@ -8,17 +8,17 @@ hyde: - function defined_in_file: stlab/concurrency/ready_future.hpp overloads: - "template \nauto make_exceptional_future(std::exception_ptr, E) -> future": + "template \nauto make_exceptional_future(const std::exception_ptr &, E) -> future": arguments: - description: __OPTIONAL__ name: error - type: std::exception_ptr + type: const std::exception_ptr & - description: __OPTIONAL__ name: executor type: E description: __OPTIONAL__ return: __OPTIONAL__ - signature_with_names: "template \nauto make_exceptional_future(std::exception_ptr error, E executor) -> future" + signature_with_names: "template \nauto make_exceptional_future(const std::exception_ptr & error, E executor) -> future" namespace: - stlab - v3 diff --git a/docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_invoke.md b/docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_invoke.md index b2bdb0c2..263cbee6 100644 --- a/docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_invoke.md +++ b/docs/include/stlab/concurrency/task.hpp/task_3CNoExcept2C20R2C20Args3E/model3CF2C20true3E/m_invoke.md @@ -8,7 +8,7 @@ hyde: - method inline: brief: - - "NOTE (sean-parent): `Args` are _not_ universal references. This is a `concrete` interface for the model. Do not add ` & & `, that would make it an rvalue reference. The `forward ` here is correct. We are forwarding from the client defined signature to the actual captured model." + - NOLINTNEXTLINE(performance-unnecessary-value-param) defined_in_file: stlab/concurrency/task.hpp overloads: static auto invoke(void *, Args...) -> R: @@ -22,7 +22,7 @@ hyde: description: __INLINED__ inline: description: - - "NOTE (sean-parent): `Args` are _not_ universal references. This is a `concrete` interface for the model. Do not add ` & & `, that would make it an rvalue reference. The `forward ` here is correct. We are forwarding from the client defined signature to the actual captured model." + - NOLINTNEXTLINE(performance-unnecessary-value-param) return: __OPTIONAL__ signature_with_names: static auto invoke(void * self, Args... args) -> R --- diff --git a/docs/include/stlab/forest.hpp/child_iterator3CI3E/m_child_iterator3CI3E.md b/docs/include/stlab/forest.hpp/child_iterator3CI3E/m_child_iterator3CI3E.md index cdad8ccb..fd1f843a 100644 --- a/docs/include/stlab/forest.hpp/child_iterator3CI3E/m_child_iterator3CI3E.md +++ b/docs/include/stlab/forest.hpp/child_iterator3CI3E/m_child_iterator3CI3E.md @@ -14,13 +14,13 @@ hyde: - defaulted description: Default ctor signature_with_names: child_iterator() - explicit child_iterator(I): + explicit child_iterator(const I &): arguments: - description: __OPTIONAL__ name: x - type: I + type: const I & description: Iterator ctor - signature_with_names: explicit child_iterator(I x) + signature_with_names: explicit child_iterator(const I & x) "template \nchild_iterator(const child_iterator &)": arguments: - description: __OPTIONAL__ diff --git a/docs/include/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_edge_iterator3CI2C20Edge3E.md b/docs/include/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_edge_iterator3CI2C20Edge3E.md index 33ff56fb..0d2c3a66 100644 --- a/docs/include/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_edge_iterator3CI2C20Edge3E.md +++ b/docs/include/stlab/forest.hpp/edge_iterator3CI2C20Edge3E/m_edge_iterator3CI2C20Edge3E.md @@ -14,13 +14,13 @@ hyde: - defaulted description: Default ctor signature_with_names: edge_iterator() - explicit edge_iterator(I): + explicit edge_iterator(const I &): arguments: - description: __OPTIONAL__ name: x - type: I - description: Iterator ctor - signature_with_names: explicit edge_iterator(I x) + type: const I & + description: __MISSING__ + signature_with_names: explicit edge_iterator(const I & x) "template \nedge_iterator(const edge_iterator &)": arguments: - description: __OPTIONAL__ diff --git a/docs/include/stlab/forest.hpp/forest3CT3E/m_insert.md b/docs/include/stlab/forest.hpp/forest3CT3E/m_insert.md index d77ccc9b..3c6d9fc6 100644 --- a/docs/include/stlab/forest.hpp/forest3CT3E/m_insert.md +++ b/docs/include/stlab/forest.hpp/forest3CT3E/m_insert.md @@ -22,21 +22,21 @@ hyde: description: __MISSING__ return: __OPTIONAL__ signature_with_names: auto insert(const stlab::forest::iterator & position, T x) -> stlab::forest::iterator - auto insert(stlab::forest::iterator, stlab::forest::const_child_iterator, stlab::forest::const_child_iterator) -> stlab::forest::iterator: + auto insert(stlab::forest::iterator, const stlab::forest::const_child_iterator &, const stlab::forest::const_child_iterator &) -> stlab::forest::iterator: arguments: - description: __OPTIONAL__ name: position type: stlab::forest::iterator - description: __OPTIONAL__ name: first - type: stlab::forest::const_child_iterator + type: const stlab::forest::const_child_iterator & - description: __OPTIONAL__ name: last - type: stlab::forest::const_child_iterator + type: const stlab::forest::const_child_iterator & description: __INLINED__ inline: description: - "***********************************************************************************************" return: __OPTIONAL__ - signature_with_names: auto insert(stlab::forest::iterator position, stlab::forest::const_child_iterator first, stlab::forest::const_child_iterator last) -> stlab::forest::iterator + signature_with_names: auto insert(stlab::forest::iterator position, const stlab::forest::const_child_iterator & first, const stlab::forest::const_child_iterator & last) -> stlab::forest::iterator --- diff --git a/docs/include/stlab/forest.hpp/forest3CT3E/m_splice.md b/docs/include/stlab/forest.hpp/forest3CT3E/m_splice.md index 05f903a5..24137622 100644 --- a/docs/include/stlab/forest.hpp/forest3CT3E/m_splice.md +++ b/docs/include/stlab/forest.hpp/forest3CT3E/m_splice.md @@ -10,11 +10,11 @@ hyde: brief: _multiple descriptions_ defined_in_file: stlab/forest.hpp overloads: - auto splice(stlab::forest::iterator, forest &) -> stlab::forest::iterator: + auto splice(const stlab::forest::iterator &, forest &) -> stlab::forest::iterator: arguments: - description: __OPTIONAL__ name: position - type: stlab::forest::iterator + type: const stlab::forest::iterator & - description: __OPTIONAL__ name: x type: forest & @@ -23,32 +23,35 @@ hyde: description: - "***********************************************************************************************" return: __OPTIONAL__ - signature_with_names: auto splice(stlab::forest::iterator position, forest & x) -> stlab::forest::iterator - auto splice(stlab::forest::iterator, forest &, stlab::forest::child_iterator, stlab::forest::child_iterator) -> stlab::forest::iterator: + signature_with_names: auto splice(const stlab::forest::iterator & position, forest & x) -> stlab::forest::iterator + auto splice(const stlab::forest::iterator &, forest &, const stlab::forest::child_iterator &, const stlab::forest::child_iterator &, stlab::forest::size_type) -> stlab::forest::iterator: arguments: - description: __OPTIONAL__ name: position - type: stlab::forest::iterator + type: const stlab::forest::iterator & - description: __OPTIONAL__ name: x type: forest & - description: __OPTIONAL__ name: first - type: stlab::forest::child_iterator + type: const stlab::forest::child_iterator & - description: __OPTIONAL__ name: last - type: stlab::forest::child_iterator + type: const stlab::forest::child_iterator & + - description: __OPTIONAL__ + name: count + type: stlab::forest::size_type description: __INLINED__ inline: description: - "***********************************************************************************************" return: __OPTIONAL__ - signature_with_names: auto splice(stlab::forest::iterator position, forest & x, stlab::forest::child_iterator first, stlab::forest::child_iterator last) -> stlab::forest::iterator - auto splice(stlab::forest::iterator, forest &, stlab::forest::child_iterator, stlab::forest::child_iterator, stlab::forest::size_type) -> stlab::forest::iterator: + signature_with_names: auto splice(const stlab::forest::iterator & position, forest & x, const stlab::forest::child_iterator & first, const stlab::forest::child_iterator & last, stlab::forest::size_type count) -> stlab::forest::iterator + auto splice(const stlab::forest::iterator &, forest &, stlab::forest::child_iterator, stlab::forest::child_iterator) -> stlab::forest::iterator: arguments: - description: __OPTIONAL__ name: position - type: stlab::forest::iterator + type: const stlab::forest::iterator & - description: __OPTIONAL__ name: x type: forest & @@ -58,20 +61,17 @@ hyde: - description: __OPTIONAL__ name: last type: stlab::forest::child_iterator - - description: __OPTIONAL__ - name: count - type: stlab::forest::size_type description: __INLINED__ inline: description: - "***********************************************************************************************" return: __OPTIONAL__ - signature_with_names: auto splice(stlab::forest::iterator position, forest & x, stlab::forest::child_iterator first, stlab::forest::child_iterator last, stlab::forest::size_type count) -> stlab::forest::iterator - auto splice(stlab::forest::iterator, forest &, stlab::forest::iterator) -> stlab::forest::iterator: + signature_with_names: auto splice(const stlab::forest::iterator & position, forest & x, stlab::forest::child_iterator first, stlab::forest::child_iterator last) -> stlab::forest::iterator + auto splice(const stlab::forest::iterator &, forest &, stlab::forest::iterator) -> stlab::forest::iterator: arguments: - description: __OPTIONAL__ name: position - type: stlab::forest::iterator + type: const stlab::forest::iterator & - description: __OPTIONAL__ name: x type: forest & @@ -83,5 +83,5 @@ hyde: description: - "***********************************************************************************************" return: __OPTIONAL__ - signature_with_names: auto splice(stlab::forest::iterator position, forest & x, stlab::forest::iterator i) -> stlab::forest::iterator + signature_with_names: auto splice(const stlab::forest::iterator & position, forest & x, stlab::forest::iterator i) -> stlab::forest::iterator --- diff --git a/docs/include/stlab/forest.hpp/set_next_fn3Cchild_iter.f83e6c4a/m_operator2829.md b/docs/include/stlab/forest.hpp/set_next_fn3Cchild_iter.f83e6c4a/m_operator2829.md index 597af1e8..7e02eedd 100644 --- a/docs/include/stlab/forest.hpp/set_next_fn3Cchild_iter.f83e6c4a/m_operator2829.md +++ b/docs/include/stlab/forest.hpp/set_next_fn3Cchild_iter.f83e6c4a/m_operator2829.md @@ -8,15 +8,15 @@ hyde: - method defined_in_file: stlab/forest.hpp overloads: - void operator()(child_iterator, child_iterator): + void operator()(const child_iterator &, const child_iterator &): arguments: - description: __OPTIONAL__ name: x - type: child_iterator + type: const child_iterator & - description: __OPTIONAL__ name: y - type: child_iterator + type: const child_iterator & description: __OPTIONAL__ return: __OPTIONAL__ - signature_with_names: void operator()(child_iterator x, child_iterator y) + signature_with_names: void operator()(const child_iterator & x, const child_iterator & y) --- diff --git a/docs/include/stlab/forest_algorithms.hpp/f_flatten.md b/docs/include/stlab/forest_algorithms.hpp/f_flatten.md index 0c930d67..663c18ab 100644 --- a/docs/include/stlab/forest_algorithms.hpp/f_flatten.md +++ b/docs/include/stlab/forest_algorithms.hpp/f_flatten.md @@ -11,14 +11,14 @@ hyde: - "***********************************************************************************************" defined_in_file: stlab/forest_algorithms.hpp overloads: - "template \nauto flatten(I, I, O)": + "template \nauto flatten(I, const I &, O)": arguments: - description: __OPTIONAL__ name: first type: I - description: __OPTIONAL__ name: last - type: I + type: const I & - description: __OPTIONAL__ name: out type: O @@ -27,7 +27,7 @@ hyde: description: - "***********************************************************************************************" return: __OPTIONAL__ - signature_with_names: "template \nauto flatten(I first, I last, O out)" + signature_with_names: "template \nauto flatten(I first, const I & last, O out)" namespace: - stlab - forests diff --git a/docs/include/stlab/forest_algorithms.hpp/f_transcribe.md b/docs/include/stlab/forest_algorithms.hpp/f_transcribe.md index dce9099d..e8673dc5 100644 --- a/docs/include/stlab/forest_algorithms.hpp/f_transcribe.md +++ b/docs/include/stlab/forest_algorithms.hpp/f_transcribe.md @@ -11,14 +11,14 @@ hyde: - "***********************************************************************************************" defined_in_file: stlab/forest_algorithms.hpp overloads: - "template \nauto transcribe(I, I, O, P, UP)": + "template \nauto transcribe(I, const I &, O, P, UP)": arguments: - description: __OPTIONAL__ name: first type: I - description: __OPTIONAL__ name: last - type: I + type: const I & - description: __OPTIONAL__ name: out type: O @@ -33,15 +33,15 @@ hyde: description: - "***********************************************************************************************" return: __OPTIONAL__ - signature_with_names: "template \nauto transcribe(I first, I last, O out, P proj, UP pred)" - "template \nauto transcribe(I, I, O, P)": + signature_with_names: "template \nauto transcribe(I first, const I & last, O out, P proj, UP pred)" + "template \nauto transcribe(const I &, const I &, O, P)": arguments: - description: __OPTIONAL__ name: first - type: I + type: const I & - description: __OPTIONAL__ name: last - type: I + type: const I & - description: __OPTIONAL__ name: out type: O @@ -50,7 +50,7 @@ hyde: type: P description: __MISSING__ return: __OPTIONAL__ - signature_with_names: "template \nauto transcribe(I first, I last, O out, P proj)" + signature_with_names: "template \nauto transcribe(const I & first, const I & last, O out, P proj)" "template \nauto transcribe(const R &, O, P, UP)": arguments: - description: __OPTIONAL__ diff --git a/docs/include/stlab/forest_algorithms.hpp/transcribe_iterator3CContainer3E/m_transcribe_iterator3CContainer3E.md b/docs/include/stlab/forest_algorithms.hpp/transcribe_iterator3CContainer3E/m_transcribe_iterator3CContainer3E.md index 289cdad8..614051ac 100644 --- a/docs/include/stlab/forest_algorithms.hpp/transcribe_iterator3CContainer3E/m_transcribe_iterator3CContainer3E.md +++ b/docs/include/stlab/forest_algorithms.hpp/transcribe_iterator3CContainer3E/m_transcribe_iterator3CContainer3E.md @@ -9,14 +9,14 @@ hyde: defined_in_file: stlab/forest_algorithms.hpp is_ctor: true overloads: - transcribe_iterator(Container &, typename Container::iterator): + transcribe_iterator(Container &, const typename Container::iterator &): arguments: - description: __OPTIONAL__ name: c type: Container & - description: __OPTIONAL__ name: i - type: typename Container::iterator + type: const typename Container::iterator & description: __OPTIONAL__ - signature_with_names: transcribe_iterator(Container & c, typename Container::iterator i) + signature_with_names: transcribe_iterator(Container & c, const typename Container::iterator & i) --- diff --git a/docs/include/stlab/iterator/set_next.hpp/f_set_next.md b/docs/include/stlab/iterator/set_next.hpp/f_set_next.md index a6bc9142..cb143d48 100644 --- a/docs/include/stlab/iterator/set_next.hpp/f_set_next.md +++ b/docs/include/stlab/iterator/set_next.hpp/f_set_next.md @@ -11,20 +11,20 @@ hyde: - "***********************************************************************************************" defined_in_file: stlab/iterator/set_next.hpp overloads: - "template \nvoid set_next(I, I)": + "template \nvoid set_next(const I &, const I &)": arguments: - description: __OPTIONAL__ name: x - type: I + type: const I & - description: __OPTIONAL__ name: y - type: I + type: const I & description: __INLINED__ inline: description: - "***********************************************************************************************" return: __OPTIONAL__ - signature_with_names: "template \nvoid set_next(I x, I y)" + signature_with_names: "template \nvoid set_next(const I & x, const I & y)" namespace: - stlab - unsafe From 95d047866aef0de95331d2b6878656af76f12433 Mon Sep 17 00:00:00 2001 From: Sean Parent Date: Fri, 17 Jan 2025 13:33:51 -0800 Subject: [PATCH 08/14] Update f_merge_channel.md --- docs/include/stlab/concurrency/channel.hpp/f_merge_channel.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/include/stlab/concurrency/channel.hpp/f_merge_channel.md b/docs/include/stlab/concurrency/channel.hpp/f_merge_channel.md index 3acd9af8..5b07ccfc 100644 --- a/docs/include/stlab/concurrency/channel.hpp/f_merge_channel.md +++ b/docs/include/stlab/concurrency/channel.hpp/f_merge_channel.md @@ -21,7 +21,7 @@ hyde: type: F - description: The upstream receiver. name: upstream_receiver - type: R... + type: R &&... description: Creates a receiver with an attached process that executes the by `M`specified merge strategy whenever an upstream process provides a value. `M` can be of type `round_robin_t`, `unordered_t`, or `zip_with`. inline: description: From dae01552802a3dfe96fba30d679de355d2f692f8 Mon Sep 17 00:00:00 2001 From: Sean Parent Date: Fri, 17 Jan 2025 14:08:28 -0800 Subject: [PATCH 09/14] Fixing source links and cleaning out build instructions. --- docs/Gemfile.lock | 2 +- docs/_config.yml | 2 +- docs/tools/docker-tools/README.md | 56 ++----------------------------- 3 files changed, 4 insertions(+), 56 deletions(-) diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock index f98fea61..1256b81b 100644 --- a/docs/Gemfile.lock +++ b/docs/Gemfile.lock @@ -91,7 +91,7 @@ GEM listen (3.9.0) rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) - logger (1.6.4) + logger (1.6.5) mercenary (0.4.0) pathutil (0.16.2) forwardable-extended (~> 2.6) diff --git a/docs/_config.yml b/docs/_config.yml index 29b92e34..108996f6 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -37,7 +37,7 @@ exclude: adobe_hyde: header_image: stlab-logo-long.svg hyde_yaml_dir: /include - source_root: https://github.com/stlab/libraries/blob/main + source_root: https://github.com/stlab/libraries/blob/main/include excerpt_separator: markdown: kramdown utterances: diff --git a/docs/tools/docker-tools/README.md b/docs/tools/docker-tools/README.md index cc15fedd..f2f32b78 100644 --- a/docs/tools/docker-tools/README.md +++ b/docs/tools/docker-tools/README.md @@ -36,38 +36,11 @@ echo $VERSION > ./docs/tools/docker-tools/VERSION echo $RUBY_VERSION > ./docs/.ruby-version ``` -Build the base image, no-cache is used so the latest tools are installed +Build the image, no-cache is used so the latest tools are installed ```bash - docker build --build-arg RUBY_VERSION=$RUBY_VERSION --file ./docs/tools/docker-tools/Dockerfile --tag $VOLUME . --no-cache - - -#docker build --build-arg RUBY_VERSION=$RUBY_VERSION --file ./docs/tools/docker-tools/Dockerfile --target base --tag $VOLUME . --no-cache -``` - -Update the docs environment (see below for using local theme) - - ## Running the Docker image with remote theme @@ -138,35 +111,10 @@ docker ps docker exec -it bash ``` -## To use a local copy of the Jekyll theme - -Edit Gemfile and _config.yml to use a local copy of the theme. See `[local-them]` in the files for details. - -```bash -code ./docs/Gemfile -code ./docs/_config.yml -``` - -``` -docker run --mount type=bind,source="$(pwd)",target=/mnt/host \ - --mount type=bind,source=`readlink -f ../../adobe/hyde-theme`,target=/mnt/themes \ - --tty --interactive --publish 3000-3001:3000-3001 \ - $VOLUME bash -``` - ### Release Notes - 1.0.0 - Initial release for Jekyll - 1.0.1 - Updating tool set - 1.0.2 - Updating in for Hyde 2.0 - 1.0.3 - Updating Jekyll to 4.2.0 for new Hyde and moving to GitHub Actions. -- 1.0.4 - Updating docs for new header directory structure. - - - - $(rbenv init -)" - rbenv install `cat .ruby-version` - gem install bundler - rbenv rehash - bundle config set frozen true - bundle install +- 1.0.4 - Updating docs for new header directory structure. The gem installs are no longer baked into the image, this was causing too many issues. From e6062e9ffbf6bf391deb3611b26e2aa61448653e Mon Sep 17 00:00:00 2001 From: Sean Parent Date: Fri, 24 Jan 2025 15:46:34 -0800 Subject: [PATCH 10/14] Delete _overrides-dark.scss --- docs/_sass/_overrides-dark.scss | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100755 docs/_sass/_overrides-dark.scss diff --git a/docs/_sass/_overrides-dark.scss b/docs/_sass/_overrides-dark.scss deleted file mode 100755 index 81cba845..00000000 --- a/docs/_sass/_overrides-dark.scss +++ /dev/null @@ -1,12 +0,0 @@ -// Copy this file to you site and use it to override CSS variables that apply to the dark CSS -// definitions. See `main-dark.scss` in the theme for a complete list of variables you can override -// with this file. - -//@forward "overrides-dark" show $hyde-primary; -// @debug "Old link-color: #{$link-color}"; - -@use "overrides" as *; - -$hyde-primary: $stlab-purple; -// $link-color: $stlab-purple; -// @debug "New link-color: #{$link-color}"; From e9f8e8f5beeb4b5c7f9c6b3bf2d8ea368ec10ddc Mon Sep 17 00:00:00 2001 From: Sean Parent Date: Fri, 24 Jan 2025 16:05:41 -0800 Subject: [PATCH 11/14] Cleaning up. --- docs/_sass/_overrides-light.scss | 14 -------------- docs/_sass/_overrides.scss | 2 +- 2 files changed, 1 insertion(+), 15 deletions(-) delete mode 100755 docs/_sass/_overrides-light.scss diff --git a/docs/_sass/_overrides-light.scss b/docs/_sass/_overrides-light.scss deleted file mode 100755 index 7e6a4621..00000000 --- a/docs/_sass/_overrides-light.scss +++ /dev/null @@ -1,14 +0,0 @@ -// Copy this file to you site and use it to override CSS variables that apply to the light CSS -// definitions. See `main-light.scss` in the theme for a complete list of variables you can override -// with this file. - -// @debug "Old hyde-primary: #{$link-color}"; - - -//@forward "overrides-light" show $hyde-primary, $link-color; - -@use "overrides" as *; - -$hyde-primary: $stlab-purple; -$link-color: $stlab-purple; -// @debug "New link-color: #{$link-color}"; diff --git a/docs/_sass/_overrides.scss b/docs/_sass/_overrides.scss index 2e21aa3d..657e1645 100644 --- a/docs/_sass/_overrides.scss +++ b/docs/_sass/_overrides.scss @@ -6,5 +6,5 @@ // $base-font-family: "Georgia"; // @debug "New base-font-family: #{$base-font-family}"; - $stlab-purple: #652f8e; +$hyde-primary: $stlab-purple From 32b35d7a540f9c5a5279ff79ae229e88fc413ce8 Mon Sep 17 00:00:00 2001 From: Sean Parent Date: Fri, 24 Jan 2025 16:19:40 -0800 Subject: [PATCH 12/14] Turning remote theme on again. --- docs/Gemfile | 2 +- docs/_config.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/Gemfile b/docs/Gemfile index 016c511f..c2555c5a 100644 --- a/docs/Gemfile +++ b/docs/Gemfile @@ -11,4 +11,4 @@ gem 'logger' # don't submit this line to the upstream repo ## [local-theme] Enable this line for local theme development -gem 'jekyll-theme-adobe-hyde', path: '../../themes' +# gem 'jekyll-theme-adobe-hyde', path: '../../themes' diff --git a/docs/_config.yml b/docs/_config.yml index 108996f6..2e20c617 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -17,8 +17,8 @@ twitter_username: SeanParent github_username: stlab ## [local-theme] To build locally, toggle these two lines -# remote_theme: adobe/hyde-theme@v2.0.2 -theme: jekyll-theme-adobe-hyde +remote_theme: adobe/hyde-theme@v3.0.0 +#theme: jekyll-theme-adobe-hyde exclude: - _source From 7103f32623290238ac3d47f7d858ff7129f4002e Mon Sep 17 00:00:00 2001 From: Sean Parent Date: Fri, 24 Jan 2025 16:24:53 -0800 Subject: [PATCH 13/14] Updating ruby setup. --- .github/workflows/jekyll.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/jekyll.yml b/.github/workflows/jekyll.yml index b401b802..091bec84 100644 --- a/.github/workflows/jekyll.yml +++ b/.github/workflows/jekyll.yml @@ -37,9 +37,8 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Setup Ruby - uses: ruby/setup-ruby@8575951200e472d5f2d95c625da0c7bec8217c42 # v1.161.0 + uses: ruby/setup-ruby@v1.213.0 with: - ruby-version: '3.2' # Not needed with a .ruby-version file bundler-cache: true # runs 'bundle install' and caches installed gems automatically cache-version: 0 # Increment this number if you need to re-download cached gems - name: Setup Pages From d80dacd6c3d31e4633ce8aebdb1f2fb28fd93b16 Mon Sep 17 00:00:00 2001 From: Sean Parent Date: Fri, 24 Jan 2025 16:27:24 -0800 Subject: [PATCH 14/14] Putting ruby-version back... --- .github/workflows/jekyll.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/jekyll.yml b/.github/workflows/jekyll.yml index 091bec84..301f743b 100644 --- a/.github/workflows/jekyll.yml +++ b/.github/workflows/jekyll.yml @@ -39,6 +39,7 @@ jobs: - name: Setup Ruby uses: ruby/setup-ruby@v1.213.0 with: + ruby-version: '3.4.1' # Not needed with a .ruby-version file bundler-cache: true # runs 'bundle install' and caches installed gems automatically cache-version: 0 # Increment this number if you need to re-download cached gems - name: Setup Pages