File indexing completed on 2026-04-09 08:20:37
0001
0002
0003
0004
0005
0006
0007 #pragma once
0008
0009 #include <memory>
0010 #include <string>
0011 #include <unordered_map>
0012 #include <vector>
0013
0014 #include "AuxInterface.hh"
0015
0016 namespace celeritas
0017 {
0018
0019
0020
0021
0022
0023
0024 class AuxParamsRegistry
0025 {
0026 public:
0027
0028
0029 using SPParams = std::shared_ptr<AuxParamsInterface>;
0030 using SPConstParams = std::shared_ptr<AuxParamsInterface const>;
0031
0032
0033 public:
0034
0035 AuxParamsRegistry() = default;
0036
0037
0038
0039
0040 AuxId next_id() const { return AuxId(params_.size()); }
0041
0042
0043 void insert(SPParams params);
0044
0045
0046 AuxId::size_type size() const { return params_.size(); }
0047
0048
0049 inline SPParams const& at(AuxId);
0050 inline SPConstParams at(AuxId) const;
0051
0052
0053 inline std::string const& id_to_label(AuxId id) const;
0054
0055
0056 AuxId find(std::string const& label) const;
0057
0058 private:
0059 std::vector<SPParams> params_;
0060 std::vector<std::string> labels_;
0061 std::unordered_map<std::string, AuxId> aux_ids_;
0062 };
0063
0064
0065
0066
0067
0068
0069
0070 auto AuxParamsRegistry::at(AuxId id) -> SPParams const&
0071 {
0072 CELER_EXPECT(id < params_.size());
0073 return params_[id.unchecked_get()];
0074 }
0075
0076
0077
0078
0079
0080 auto AuxParamsRegistry::at(AuxId id) const -> SPConstParams
0081 {
0082 CELER_EXPECT(id < params_.size());
0083 return params_[id.unchecked_get()];
0084 }
0085
0086
0087
0088
0089
0090 std::string const& AuxParamsRegistry::id_to_label(AuxId id) const
0091 {
0092 CELER_EXPECT(id < params_.size());
0093 return labels_[id.unchecked_get()];
0094 }
0095
0096
0097 }