File indexing completed on 2025-06-07 08:06:15
0001
0002
0003
0004
0005
0006
0007
0008
0009 #pragma once
0010
0011 #include <ranges>
0012
0013 namespace Acts::detail {
0014
0015
0016 template <typename external_t>
0017 concept isCollectionThatSupportsPushBack =
0018 std::ranges::range<external_t> && requires {
0019 typename external_t::value_type;
0020 } && requires(external_t coll, typename external_t::value_type val) {
0021 coll.push_back(val);
0022 };
0023
0024 template <typename external_t>
0025 concept isCollectionThatSupportsInsert =
0026 std::ranges::range<external_t> && requires {
0027 typename external_t::value_type;
0028 } && requires(external_t coll, typename external_t::value_type val) {
0029 coll.insert(std::ranges::end(coll), val);
0030 };
0031
0032
0033 template <typename value_t>
0034 void pushBackOrInsertAtEnd(
0035 Acts::detail::isCollectionThatSupportsPushBack auto& storage,
0036 value_t&& value) {
0037 storage.push_back(std::forward<value_t>(value));
0038 }
0039
0040 template <std::ranges::range storage_t, typename value_t>
0041 requires(!Acts::detail::isCollectionThatSupportsPushBack<storage_t> &&
0042 Acts::detail::isCollectionThatSupportsInsert<storage_t>)
0043 void pushBackOrInsertAtEnd(storage_t& storage, value_t&& value) {
0044 storage.insert(std::ranges::end(storage), std::forward<value_t>(value));
0045 }
0046
0047 }