Skip to content
Snippets Groups Projects
Commit e2861d1d authored by Wuttke, Joachim's avatar Wuttke, Joachim
Browse files

don't call virtual method from c'tor

parent a5394134
No related branches found
No related tags found
1 merge request!2186some more cleanup, and new clang-tidy configuration with all obligatory tests
......@@ -20,17 +20,14 @@ Checks: '*,
-bugprone-copy-constructor-init,
-bugprone-exception-escape,
-bugprone-misplaced-widening-cast,
-clang-analyzer-core.CallAndMessage,
-clang-analyzer-optin.cplusplus.VirtualCall,
-cppcoreguidelines-pro-type-const-cast,
clang-analyzer-core.CallAndMessage,
modernize-use-equals-default,
-*-use-nullptr,
-*-use-override,
-bugprone-unused-return-value,
-clang-analyzer-optin.cplusplus.VirtualCall,
-cppcoreguidelines-explicit-virtual-functions,
-cppcoreguidelines-prefer-member-initializer,
-cppcoreguidelines-pro-type-const-cast,
-hicpp-move-const-arg,
-llvm-namespace-comment,
-llvm-qualified-auto,
......@@ -42,6 +39,9 @@ modernize-use-equals-default,
-modernize-use-auto,
-modernize-use-default-member-init,
-modermize-use-emplace,
-modernize-use-equals-default,
-modernize-use-nullptr,
-modernize-use-override,
-modernize-use-using,
-performance-for-range-copy,
-performance-inefficient-vector-operation,
......
......@@ -52,7 +52,11 @@ AlphaScan::AlphaScan(const Scale& alpha_axis)
if (axis_values.back() > std::numbers::pi / 2)
throw std::runtime_error("AlphaScan: angles beyond normal.");
createBeams();
m_beams.clear();
for (size_t i = 0; i < nScan(); i++) {
auto* beam = new Beam(defaultIntensity, defaultWavelength, m_axis->binCenter(i));
m_beams.emplace_back(beam);
}
}
AlphaScan::AlphaScan(std::vector<double> points)
......@@ -100,12 +104,3 @@ std::vector<SpecularElement> AlphaScan::generateElements() const
}
return result;
}
void AlphaScan::createBeams()
{
m_beams.clear();
for (size_t i = 0; i < nScan(); i++) {
auto* beam = new Beam(defaultIntensity, defaultWavelength, m_axis->binCenter(i));
m_beams.emplace_back(beam);
}
}
......@@ -45,8 +45,6 @@ public:
}
private:
void createBeams() override;
double m_alpha_offset{0};
#endif // SWIG
......
......@@ -108,7 +108,6 @@ protected:
CloneableVector<Beam> m_beams;
private:
virtual void createBeams() = 0;
void setBeams(const CloneableVector<Beam>& beams);
bool isCommonIntensity() const;
......
......@@ -33,7 +33,10 @@ LambdaScan::LambdaScan(Scale* lambdaScale)
if (axis_values.front() <= 0)
throw std::runtime_error("LambdaScan: non-positive wavelengths.");
createBeams();
for (size_t i = 0; i < nScan(); i++) {
auto* beam = new Beam(defaultIntensity, m_axis->binCenter(i), defaultInclination);
m_beams.emplace_back(beam);
}
}
LambdaScan::LambdaScan(const Scale& lambdaScale)
......@@ -75,12 +78,3 @@ std::vector<SpecularElement> LambdaScan::generateElements() const
}
return result;
}
void LambdaScan::createBeams()
{
m_beams.clear();
for (size_t i = 0; i < nScan(); i++) {
auto* beam = new Beam(defaultIntensity, m_axis->binCenter(i), defaultInclination);
m_beams.emplace_back(beam);
}
}
......@@ -40,7 +40,6 @@ public:
private:
LambdaScan(Scale* lambdaScale);
void createBeams() override;
#endif // SWIG
};
......
......@@ -33,7 +33,17 @@ QzScan::QzScan(Scale* qs_nm)
if (axis_values.front() < 0)
throw std::runtime_error("QzScan: negative q-values.");
createBeams();
m_beams.clear();
for (size_t i = 0; i < nScan(); i++) {
// Qz scan is internally understood as wavelength scan
// TODO use some shared function "qz2lambda"
double lambda =
4.0 * std::numbers::pi * std::sin(defaultInclination) / m_axis->binCenter(i);
auto* beam = new Beam(defaultIntensity, lambda, defaultInclination);
// Since the grazing geometry is not clear in q-space, the footprint should not be used
beam->setFootprint(nullptr);
m_beams.emplace_back(beam);
}
}
QzScan::QzScan(const Scale& qs_nm)
......@@ -132,18 +142,3 @@ void QzScan::setVectorResolution(const IDistribution1D& distr, const std::vector
ASSERT(std_devs.size() > 1);
m_resol_width = std_devs;
}
void QzScan::createBeams()
{
m_beams.clear();
for (size_t i = 0; i < nScan(); i++) {
// Qz scan is internally understood as wavelength scan
// TODO use some shared function "qz2lambda"
double lambda =
4.0 * std::numbers::pi * std::sin(defaultInclination) / m_axis->binCenter(i);
auto* beam = new Beam(defaultIntensity, lambda, defaultInclination);
// Since the grazing geometry is not clear in q-space, the footprint should not be used
beam->setFootprint(nullptr);
m_beams.emplace_back(beam);
}
}
......@@ -71,8 +71,6 @@ public:
private:
QzScan(Scale* qs_nm);
void createBeams() override;
std::unique_ptr<const IDistribution1D> m_qz_distrib;
std::vector<double> m_resol_width;
bool m_relative_resolution{false};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment