File indexing completed on 2026-05-27 07:24:04
0001
0002
0003
0004
0005
0006
0007
0008
0009 #pragma once
0010
0011
0012 #include "detray/definitions/algorithms.hpp"
0013 #include "detray/definitions/detail/qualifiers.hpp"
0014 #include "detray/definitions/indexing.hpp"
0015 #include "detray/utils/invalid_values.hpp"
0016
0017 namespace detray {
0018
0019
0020
0021
0022
0023
0024
0025
0026 template <bool kSORT = false>
0027 struct replace {
0028
0029
0030
0031
0032 template <typename bin_t, typename content_t>
0033 DETRAY_HOST_DEVICE void operator()(bin_t &&bin, content_t &&entry) const {
0034 std::forward<bin_t>(bin).init(std::forward<content_t>(entry));
0035
0036
0037 if constexpr (kSORT) {
0038 detray::sequential_sort(std::forward<bin_t>(bin).begin(),
0039 std::forward<bin_t>(bin).end());
0040 }
0041 }
0042 };
0043
0044
0045
0046
0047 template <bool kSORT = false>
0048 struct attach {
0049
0050
0051
0052
0053 template <typename bin_t, typename entry_t>
0054 DETRAY_HOST_DEVICE void operator()(bin_t &&bin, entry_t &&entry) const {
0055 std::forward<bin_t>(bin).push_back(std::forward<entry_t>(entry));
0056
0057
0058 if constexpr (kSORT) {
0059 detray::sequential_sort(std::forward<bin_t>(bin).begin(),
0060 std::forward<bin_t>(bin).end());
0061 }
0062 }
0063 };
0064
0065
0066
0067
0068
0069 template <bool kSORT = false>
0070 struct complete {
0071
0072
0073
0074
0075 template <typename bin_t, typename entry_t>
0076 DETRAY_HOST_DEVICE void operator()(bin_t &&bin, entry_t &&entry) const {
0077 for (dindex i{std::forward<bin_t>(bin).size()};
0078 i < std::forward<bin_t>(bin).capacity(); ++i) {
0079 std::forward<bin_t>(bin).push_back(std::forward<entry_t>(entry));
0080 }
0081
0082
0083 if constexpr (kSORT) {
0084 detray::sequential_sort(std::forward<bin_t>(bin).begin(),
0085 std::forward<bin_t>(bin).end());
0086 }
0087 }
0088 };
0089
0090 }