File indexing completed on 2025-12-16 10:23:48
0001
0002
0003
0004
0005
0006
0007 #pragma once
0008
0009 #include "corecel/Types.hh"
0010 #include "corecel/data/CollectionBuilder.hh"
0011 #include "corecel/data/DedupeCollectionBuilder.hh"
0012
0013 #include "BIHBuilder.hh"
0014 #include "SurfacesRecordBuilder.hh"
0015 #include "TransformRecordInserter.hh"
0016 #include "../BoundingBoxUtils.hh"
0017 #include "../OrangeData.hh"
0018 #include "../OrangeInput.hh"
0019 #include "../OrangeTypes.hh"
0020
0021 namespace celeritas
0022 {
0023 namespace detail
0024 {
0025 class UniverseInserter;
0026
0027
0028
0029
0030
0031
0032 class UnitInserter
0033 {
0034 public:
0035
0036
0037 using Data = HostVal<OrangeParamsData>;
0038
0039
0040 public:
0041
0042 UnitInserter(UniverseInserter* insert_universe, Data* orange_data);
0043
0044
0045 UniverseId operator()(UnitInput&& inp);
0046
0047 private:
0048 Data* orange_data_{nullptr};
0049 BIHBuilder build_bih_tree_;
0050 TransformRecordInserter insert_transform_;
0051 SurfacesRecordBuilder build_surfaces_;
0052 UniverseInserter* insert_universe_;
0053
0054 CollectionBuilder<SimpleUnitRecord> simple_units_;
0055
0056 DedupeCollectionBuilder<LocalSurfaceId> local_surface_ids_;
0057 DedupeCollectionBuilder<LocalVolumeId> local_volume_ids_;
0058 DedupeCollectionBuilder<OpaqueId<real_type>> real_ids_;
0059 DedupeCollectionBuilder<logic_int> logic_ints_;
0060 DedupeCollectionBuilder<real_type> reals_;
0061 DedupeCollectionBuilder<SurfaceType> surface_types_;
0062 CollectionBuilder<ConnectivityRecord> connectivity_records_;
0063 CollectionBuilder<VolumeRecord> volume_records_;
0064 CollectionBuilder<OrientedBoundingZoneRecord> obz_records_;
0065 CollectionBuilder<Daughter> daughters_;
0066 BoundingBoxBumper<fast_real_type, real_type> calc_bumped_;
0067
0068
0069
0070 VolumeRecord
0071 insert_volume(SurfacesRecord const& unit, VolumeInput const& v);
0072
0073 void process_daughter(VolumeRecord* vol_record,
0074 DaughterInput const& daughter_input);
0075
0076 void process_obz_record(VolumeRecord* vol_record,
0077 OrientedBoundingZoneInput const& obz_input);
0078 };
0079
0080
0081 }
0082 }