File indexing completed on 2025-09-18 09:24:48
0001
0002
0003
0004
0005
0006
0007 #pragma once
0008
0009 #include "corecel/Types.hh"
0010 #include "corecel/cont/EnumArray.hh"
0011 #include "corecel/data/CollectionBuilder.hh"
0012 #include "corecel/io/Label.hh"
0013
0014 #include "../OrangeData.hh"
0015 #include "../OrangeTypes.hh"
0016
0017 namespace celeritas
0018 {
0019 namespace detail
0020 {
0021
0022
0023
0024
0025 class UniverseInserter
0026 {
0027 public:
0028
0029
0030 using Data = HostVal<OrangeParamsData>;
0031 using VecLabel = std::vector<Label>;
0032
0033
0034 public:
0035
0036 UniverseInserter(VecLabel* universe_labels,
0037 VecLabel* surface_labels,
0038 VecLabel* volume_labels,
0039 Data* data);
0040
0041
0042 UniverseId operator()(UniverseType type,
0043 Label univ_label,
0044 VecLabel surface_labels,
0045 VecLabel volume_labels);
0046
0047 private:
0048 VecLabel* universe_labels_;
0049 VecLabel* surface_labels_;
0050 VecLabel* volume_labels_;
0051
0052 CollectionBuilder<UniverseType, MemSpace::host, UniverseId> types_;
0053 CollectionBuilder<size_type, MemSpace::host, UniverseId> indices_;
0054 CollectionBuilder<size_type> surfaces_;
0055 CollectionBuilder<size_type> volumes_;
0056
0057 EnumArray<UniverseType, size_type> num_universe_types_{};
0058 size_type accum_surface_{0};
0059 size_type accum_volume_{0};
0060 };
0061
0062
0063 }
0064 }