Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-06-07 08:06:15

0001 // This file is part of the Acts project.
0002 //
0003 // Copyright (C) 2024 CERN for the benefit of the Acts project
0004 //
0005 // This Source Code Form is subject to the terms of the Mozilla Public
0006 // License, v. 2.0. If a copy of the MPL was not distributed with this
0007 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
0008 
0009 #pragma once
0010 
0011 #include <ranges>
0012 
0013 namespace Acts::detail {
0014 
0015 // Define some concepts
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 // Define some functions
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 }  // namespace Acts::detail