diff --git a/demo/epidemiology/src/evaluate.h b/demo/epidemiology/src/evaluate.h index 9533dd93b..4790821bc 100644 --- a/demo/epidemiology/src/evaluate.h +++ b/demo/epidemiology/src/evaluate.h @@ -62,7 +62,7 @@ inline void PlotResults(const TimeSeries* analytical, const TimeSeries* mean, allts.Add(ind_ts, Concat("i", i++)); } LineGraph lg(&allts, "", "Time [h]", "Population Fraction", plot_legend, - style, 350, 250); + &style, 350, 250); if (analytical) { lg.Add("susceptible-analytical", " ", "L", kBlue, 1.0, kDashed, 2, kBlue, 1.0, 1, 1, 0, 1.0, 0); diff --git a/src/core/agent/agent_pointer.h b/src/core/agent/agent_pointer.h index 107739b2c..e5ced8e40 100644 --- a/src/core/agent/agent_pointer.h +++ b/src/core/agent/agent_pointer.h @@ -90,12 +90,12 @@ class AgentPointer { uint64_t GetUidAsUint64() const { if (*this == nullptr) { - return AgentUid(); + return static_cast(AgentUid()); } if (gAgentPointerMode == AgentPointerMode::kIndirect) { - return d_.uid; + return static_cast(d_.uid); } else { - return d_.agent->GetUid(); + return static_cast(d_.agent->GetUid()); } } @@ -211,6 +211,9 @@ class AgentPointer { const TAgent& operator*() const { return *(this->operator->()); } + // Note: allow for implicit conversion to bool + /// Allows to use `if (agent_ptr) { ... }`. Returns true if the pointer is not + /// nullptr. operator bool() const { return *this != nullptr; } // NOLINT operator AgentPointer() const { diff --git a/src/core/agent/agent_uid.h b/src/core/agent/agent_uid.h index 67f86946d..b9285d1a3 100644 --- a/src/core/agent/agent_uid.h +++ b/src/core/agent/agent_uid.h @@ -90,7 +90,7 @@ class AgentUid { return *this; } - operator uint64_t() const { + explicit operator uint64_t() const { return (static_cast(reused_) << 32) | static_cast(index_); } diff --git a/src/core/analysis/line_graph.cc b/src/core/analysis/line_graph.cc index 1984c624f..fdfeeff44 100644 --- a/src/core/analysis/line_graph.cc +++ b/src/core/analysis/line_graph.cc @@ -30,9 +30,17 @@ namespace experimental { // ----------------------------------------------------------------------------- LineGraph::LineGraph(const TimeSeries* ts, const std::string& title, const std::string& xaxis_title, - const std::string& yaxis_title, bool legend, TStyle* style, - int width, int height) - : ts_(ts), s_(style) { + const std::string& yaxis_title, bool legend, + const Style* style, int width, int height) + : ts_(ts) { + if (!ts_) { + Log::Fatal("LineGraph::LineGraph", + "The provided TimeSeries is a nullptr. Operation aborted."); + return; + } + if (style) { + s_ = style->GetTStyle(); + } if (s_) { s_->cd(); } diff --git a/src/core/analysis/line_graph.h b/src/core/analysis/line_graph.h index 71def94dc..93f55ebe8 100644 --- a/src/core/analysis/line_graph.h +++ b/src/core/analysis/line_graph.h @@ -17,6 +17,7 @@ #include #include #include +#include "core/analysis/style.h" #include "core/real_t.h" #include "core/util/root.h" @@ -39,7 +40,7 @@ class LineGraph { LineGraph(const TimeSeries* ts, const std::string& title = "", const std::string& xaxis_title = "", const std::string& yaxis_title = "", bool legend = true, - TStyle* style = nullptr, int width = 700, int height = 500); + const Style* style = nullptr, int width = 700, int height = 500); ~LineGraph(); diff --git a/src/core/analysis/style.h b/src/core/analysis/style.h index 40a3006ab..8b3f97cc3 100644 --- a/src/core/analysis/style.h +++ b/src/core/analysis/style.h @@ -31,7 +31,7 @@ class Style : public TNamed, public: Style(); ~Style(); - operator TStyle*() const; + explicit operator TStyle*() const; TStyle* GetTStyle() const; private: diff --git a/src/core/environment/morton_order.cc b/src/core/environment/morton_order.cc index 72ca4f837..5ac295eb3 100644 --- a/src/core/environment/morton_order.cc +++ b/src/core/environment/morton_order.cc @@ -22,7 +22,7 @@ namespace bdm { template class Stack { public: - Stack(uint64_t max_elements) { data_.resize(max_elements); } + explicit Stack(uint64_t max_elements) { data_.resize(max_elements); } void Push(const T& el) { data_[++top_] = el; diff --git a/src/core/environment/uniform_grid_environment.h b/src/core/environment/uniform_grid_environment.h index 6389349f1..b50a0f47b 100644 --- a/src/core/environment/uniform_grid_environment.h +++ b/src/core/environment/uniform_grid_environment.h @@ -614,7 +614,7 @@ class UniformGridEnvironment : public Environment { private: class LoadBalanceInfoUG : public LoadBalanceInfo { public: - LoadBalanceInfoUG(UniformGridEnvironment* grid); + explicit LoadBalanceInfoUG(UniformGridEnvironment* grid); virtual ~LoadBalanceInfoUG(); void Update(); void CallHandleIteratorConsumer( diff --git a/src/core/functor.h b/src/core/functor.h index cb38111bc..1658c708b 100644 --- a/src/core/functor.h +++ b/src/core/functor.h @@ -42,7 +42,7 @@ struct LambdaFunctor final : public Functor { TLambda lambda; - LambdaFunctor(const TLambda& lambda) : lambda(lambda) {} + explicit LambdaFunctor(const TLambda& lambda) : lambda(lambda) {} LambdaFunctor(const LambdaFunctor& other) : lambda(other.lambda) {} virtual ~LambdaFunctor() = default; @@ -57,7 +57,7 @@ struct LambdaFunctor final : public Functor { TLambda lambda; - LambdaFunctor(const TLambda& lambda) : lambda(lambda) {} + explicit LambdaFunctor(const TLambda& lambda) : lambda(lambda) {} LambdaFunctor(const LambdaFunctor& other) : lambda(other.lambda) {} virtual ~LambdaFunctor() = default; diff --git a/src/core/util/random.h b/src/core/util/random.h index 8a4a23c4d..3d3750cd8 100644 --- a/src/core/util/random.h +++ b/src/core/util/random.h @@ -33,7 +33,7 @@ template class DistributionRng { public: DistributionRng() = default; - DistributionRng(TRootIOCtor*) {} + explicit DistributionRng(TRootIOCtor*) {} virtual ~DistributionRng() = default; /// Draws a sample from the distribution TSample Sample(); @@ -89,7 +89,7 @@ class GausRng : public DistributionRng { // ----------------------------------------------------------------------------- class ExpRng : public DistributionRng { public: - ExpRng(real_t tau); + explicit ExpRng(real_t tau); virtual ~ExpRng(); private: @@ -113,7 +113,7 @@ class LandauRng : public DistributionRng { // ----------------------------------------------------------------------------- class PoissonDRng : public DistributionRng { public: - PoissonDRng(real_t mean); + explicit PoissonDRng(real_t mean); virtual ~PoissonDRng(); private: @@ -137,7 +137,8 @@ class BreitWignerRng : public DistributionRng { // ----------------------------------------------------------------------------- class UserDefinedDistRng1D : public DistributionRng { public: - UserDefinedDistRng1D(TRootIOCtor* ioctor) : DistributionRng(ioctor) {} + explicit UserDefinedDistRng1D(TRootIOCtor* ioctor) + : DistributionRng(ioctor) {} UserDefinedDistRng1D(TF1* function, const char* option); virtual ~UserDefinedDistRng1D(); void Draw(const char* option = ""); @@ -154,7 +155,8 @@ class UserDefinedDistRng1D : public DistributionRng { // ----------------------------------------------------------------------------- class UserDefinedDistRng2D : public DistributionRng { public: - UserDefinedDistRng2D(TRootIOCtor* ioctor) : DistributionRng(ioctor) {} + explicit UserDefinedDistRng2D(TRootIOCtor* ioctor) + : DistributionRng(ioctor) {} UserDefinedDistRng2D(TF2* function, const char* option); virtual ~UserDefinedDistRng2D(); void Draw(const char* option = ""); @@ -172,7 +174,8 @@ class UserDefinedDistRng2D : public DistributionRng { // ----------------------------------------------------------------------------- class UserDefinedDistRng3D : public DistributionRng { public: - UserDefinedDistRng3D(TRootIOCtor* ioctor) : DistributionRng(ioctor) {} + explicit UserDefinedDistRng3D(TRootIOCtor* ioctor) + : DistributionRng(ioctor) {} UserDefinedDistRng3D(TF3* function, const char* option); virtual ~UserDefinedDistRng3D(); void Draw(const char* option = ""); @@ -246,7 +249,7 @@ class BinomialRng : public DistributionRng { // ----------------------------------------------------------------------------- class PoissonRng : public DistributionRng { public: - PoissonRng(real_t mean); + explicit PoissonRng(real_t mean); virtual ~PoissonRng(); private: diff --git a/src/core/visualization/paraview/mapped_data_array.h b/src/core/visualization/paraview/mapped_data_array.h index 56acfe851..354288edd 100644 --- a/src/core/visualization/paraview/mapped_data_array.h +++ b/src/core/visualization/paraview/mapped_data_array.h @@ -93,7 +93,7 @@ struct GetDataMemberForVis { auto* casted_agent = static_cast(agent); auto* data = reinterpret_cast( reinterpret_cast(casted_agent) + dm_offset_); - uint64_t uid = *data; + uint64_t uid = static_cast(*data); auto tid = ThreadInfo::GetInstance()->GetUniversalThreadId(); assert(temp_values_.size() > tid); temp_values_[tid][0] = uid; diff --git a/src/core/visualization/root/adaptor.h b/src/core/visualization/root/adaptor.h index 859e1df2d..a6095263a 100644 --- a/src/core/visualization/root/adaptor.h +++ b/src/core/visualization/root/adaptor.h @@ -139,7 +139,8 @@ class RootAdaptor { /// Adds a sphere object to the volume void AddSphere(const Agent *agent, TGeoVolume *container) { - std::string name = agent->GetTypeName() + std::to_string(agent->GetUid()); + std::string name = agent->GetTypeName() + + std::to_string(static_cast(agent->GetUid())); auto radius = agent->GetDiameter() / 2; auto massLocation = agent->GetPosition(); auto x = massLocation[0]; @@ -154,7 +155,8 @@ class RootAdaptor { /// Adds a cylinder object to the volume void AddCylinder(const Agent *agent, TGeoVolume *container) { if (auto neurite = dynamic_cast(agent)) { - std::string name = agent->GetTypeName() + std::to_string(agent->GetUid()); + std::string name = agent->GetTypeName() + + std::to_string(static_cast(agent->GetUid())); auto radius = neurite->GetDiameter() / 2; auto half_length = neurite->GetLength() / 2; auto massLocation = neurite->GetPosition(); diff --git a/test/unit/core/agent/agent_uid_test.cc b/test/unit/core/agent/agent_uid_test.cc index 11c791738..69f33ea13 100644 --- a/test/unit/core/agent/agent_uid_test.cc +++ b/test/unit/core/agent/agent_uid_test.cc @@ -91,13 +91,13 @@ TEST(AgentUidTest, MinusOperator) { TEST(AgentUidTest, uint64_tOperator) { AgentUid uid(123, 0); - uint64_t idx = uid; + uint64_t idx = static_cast(uid); EXPECT_EQ(idx, 123u); } TEST(AgentUidTest, uint64_tOperator2) { AgentUid uid(123, 2); - uint64_t idx = uid; + uint64_t idx = static_cast(uid); EXPECT_EQ(idx, 8589934715u); // (2 << 32) | 123u); } diff --git a/test/unit/core/environment/uniform_grid_environment_test.cc b/test/unit/core/environment/uniform_grid_environment_test.cc index 3628118fa..4a639f8cb 100644 --- a/test/unit/core/environment/uniform_grid_environment_test.cc +++ b/test/unit/core/environment/uniform_grid_environment_test.cc @@ -407,7 +407,7 @@ struct ZOrderCallback : Functor { box_cnt++; } auto* agent = rm->GetAgent(ah); - zorder[box_cnt].insert(agent->GetUid() - ref_uid); + zorder[box_cnt].insert(agent->GetUid() - static_cast(ref_uid)); cnt++; } }; diff --git a/test/unit/core/resource_manager_test.cc b/test/unit/core/resource_manager_test.cc index 4080c1a23..86846cdfd 100644 --- a/test/unit/core/resource_manager_test.cc +++ b/test/unit/core/resource_manager_test.cc @@ -41,7 +41,8 @@ TEST(ResourceManagerTest, ForEachAgentFilter) { rm->ForEachAgent( [&](Agent* a) { // NOLINT counter++; - switch (a->GetUid() - ref_uid) { + switch (static_cast(a->GetUid()) - + static_cast(ref_uid)) { case 0: EXPECT_EQ(0, dynamic_cast(a)->GetData()); break; @@ -63,7 +64,8 @@ TEST(ResourceManagerTest, ForEachAgentFilter) { rm->ForEachAgent( [&](Agent* a) { // NOLINT counter++; - switch (a->GetUid() - ref_uid) { + switch (static_cast(a->GetUid()) - + static_cast(ref_uid)) { case 1: EXPECT_EQ(1, dynamic_cast(a)->GetData()); break; diff --git a/test/unit/core/resource_manager_test.h b/test/unit/core/resource_manager_test.h index 13cfe5398..7bbbe482b 100644 --- a/test/unit/core/resource_manager_test.h +++ b/test/unit/core/resource_manager_test.h @@ -72,7 +72,8 @@ inline void RunForEachAgentTest() { uint64_t counter = 0; rm->ForEachAgent([&](Agent* element) { // NOLINT counter++; - switch (element->GetUid() - ref_uid) { + switch (static_cast(element->GetUid()) - + static_cast(ref_uid)) { case 0: EXPECT_EQ(12, dynamic_cast(element)->GetData()); break;