From 9f6801ca7465ecc87c5957b78d22c2ebc0ed4bae Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Sun, 28 Oct 2018 21:25:29 -0400 Subject: [PATCH] Use uniqe_ptr for global filter vector --- include/openmc/tallies/filter.h | 3 +- src/geometry_aux.cpp | 6 ++-- src/tallies/filter.cpp | 49 ++++++++++++++++----------------- 3 files changed, 29 insertions(+), 29 deletions(-) diff --git a/include/openmc/tallies/filter.h b/include/openmc/tallies/filter.h index 7920191aa..af84b43eb 100644 --- a/include/openmc/tallies/filter.h +++ b/include/openmc/tallies/filter.h @@ -2,6 +2,7 @@ #define OPENMC_TALLIES_FILTER_H #include +#include #include #include @@ -23,7 +24,7 @@ extern std::vector filter_matches; #pragma omp threadprivate(filter_matches) class Filter; -extern std::vector tally_filters; +extern std::vector> tally_filters; //============================================================================== //! Stores bins and weights for filtered tally events. diff --git a/src/geometry_aux.cpp b/src/geometry_aux.cpp index c0d9066a0..e3934480b 100644 --- a/src/geometry_aux.cpp +++ b/src/geometry_aux.cpp @@ -187,9 +187,9 @@ prepare_distribcell() { // Find all cells listed in a DistribcellFilter. std::unordered_set distribcells; - for (auto* filt : tally_filters) { - if (filt->type() == "distribcell") { - auto* distrib_filt = static_cast(filt); + for (auto& filt : tally_filters) { + auto* distrib_filt = dynamic_cast(filt.get()); + if (distrib_filt) { distribcells.insert(distrib_filt->cell_); } } diff --git a/src/tallies/filter.cpp b/src/tallies/filter.cpp index 5905f20b5..ef4ab345d 100644 --- a/src/tallies/filter.cpp +++ b/src/tallies/filter.cpp @@ -34,7 +34,7 @@ namespace openmc { //============================================================================== std::vector filter_matches; -std::vector tally_filters; +std::vector> tally_filters; //============================================================================== // Non-member functions @@ -48,7 +48,6 @@ free_memory_tally_c() filter_matches.clear(); } - for (Filter* filt : tally_filters) {delete filt;} tally_filters.clear(); } @@ -97,53 +96,53 @@ extern "C" { { std::string type_ {type}; if (type_ == "azimuthal") { - tally_filters.push_back(new AzimuthalFilter()); + tally_filters.push_back(std::make_unique()); } else if (type_ == "cell") { - tally_filters.push_back(new CellFilter()); + tally_filters.push_back(std::make_unique()); } else if (type_ == "cellborn") { - tally_filters.push_back(new CellbornFilter()); + tally_filters.push_back(std::make_unique()); } else if (type_ == "cellfrom") { - tally_filters.push_back(new CellFromFilter()); + tally_filters.push_back(std::make_unique()); } else if (type_ == "distribcell") { - tally_filters.push_back(new DistribcellFilter()); + tally_filters.push_back(std::make_unique()); } else if (type_ == "delayedgroup") { - tally_filters.push_back(new DelayedGroupFilter()); + tally_filters.push_back(std::make_unique()); } else if (type_ == "energyfunction") { - tally_filters.push_back(new EnergyFunctionFilter()); + tally_filters.push_back(std::make_unique()); } else if (type_ == "energy") { - tally_filters.push_back(new EnergyFilter()); + tally_filters.push_back(std::make_unique()); } else if (type_ == "energyout") { - tally_filters.push_back(new EnergyoutFilter()); + tally_filters.push_back(std::make_unique()); } else if (type_ == "legendre") { - tally_filters.push_back(new LegendreFilter()); + tally_filters.push_back(std::make_unique()); } else if (type_ == "material") { - tally_filters.push_back(new MaterialFilter()); + tally_filters.push_back(std::make_unique()); } else if (type_ == "mesh") { - tally_filters.push_back(new MeshFilter()); + tally_filters.push_back(std::make_unique()); } else if (type_ == "meshsurface") { - tally_filters.push_back(new MeshSurfaceFilter()); + tally_filters.push_back(std::make_unique()); } else if (type_ == "mu") { - tally_filters.push_back(new MuFilter()); + tally_filters.push_back(std::make_unique()); } else if (type_ == "particle") { - tally_filters.push_back(new ParticleFilter()); + tally_filters.push_back(std::make_unique()); } else if (type_ == "polar") { - tally_filters.push_back(new PolarFilter()); + tally_filters.push_back(std::make_unique()); } else if (type_ == "surface") { - tally_filters.push_back(new SurfaceFilter()); + tally_filters.push_back(std::make_unique()); } else if (type_ == "spatiallegendre") { - tally_filters.push_back(new SpatialLegendreFilter()); + tally_filters.push_back(std::make_unique()); } else if (type_ == "sphericalharmonics") { - tally_filters.push_back(new SphericalHarmonicsFilter()); + tally_filters.push_back(std::make_unique()); } else if (type_ == "universe") { - tally_filters.push_back(new UniverseFilter()); + tally_filters.push_back(std::make_unique()); } else if (type_ == "zernike") { - tally_filters.push_back(new ZernikeFilter()); + tally_filters.push_back(std::make_unique()); } else if (type_ == "zernikeradial") { - tally_filters.push_back(new ZernikeRadialFilter()); + tally_filters.push_back(std::make_unique()); } else { return nullptr; } - return tally_filters.back(); + return tally_filters.back().get(); } void filter_from_xml(Filter* filt, pugi::xml_node* node)