JFJochReceiverPlots: Safer code

This commit is contained in:
2026-02-28 16:09:14 +01:00
parent e432edb5d9
commit 6e97b7c15c
5 changed files with 164 additions and 151 deletions

View File

@@ -189,56 +189,3 @@ MultiLinePlot StatusVector::GetMaxPlot(int64_t bin_size, float x_start, float x_
ret.AddPlot(GetMaxPerBin(bin_size, x_start, x_incr, fill_value));
return ret;
}
void StatusMultiVector::Clear(size_t reserve) {
std::unique_lock ul(m);
if (reserve > 0)
r = reserve;
status.clear();
}
void StatusMultiVector::AddElement(const std::string &s, uint32_t id, float val) {
std::unique_lock ul(m);
if (!status.contains(s)) {
status[s] = std::make_unique<StatusVector>();
status[s]->Clear(r);
}
status[s]->AddElement(id, val);
}
void StatusMultiVector::AddElement(const std::string &s, uint32_t id, std::optional<float> val) {
// no need to lock, as AddElement(string, u32, T) has lock already
if (val.has_value())
AddElement(s, id, val.value());
}
MultiLinePlotStruct StatusMultiVector::GetMeanPerBin(const std::string &in_key, int64_t bin_size, float x_start,
float x_incr,
const std::optional<float> &fill_value) const {
MultiLinePlotStruct ret{};
for (const auto &[key, value]: status) {
if (key == in_key) {
ret = value->GetMeanPerBin(bin_size, x_start, x_incr, fill_value);
ret.title = key;
}
}
return ret;
}
MultiLinePlot StatusMultiVector::GetMeanPlot(int64_t bin_size, float x_start, float x_incr,
const std::optional<float> &fill_value) const {
MultiLinePlot ret;
for (const auto &[key, value]: status) {
auto tmp = value->GetMeanPerBin(bin_size, x_start, x_incr, fill_value);
tmp.title = key;
ret.AddPlot(tmp);
}
return ret;
}
std::vector<float> StatusMultiVector::ExportArray(const std::string &s) const {
auto iter = status.find(s);
if (iter == status.end() || !iter->second)
return {};
return iter->second->ExportArray();
}