supercell-wx/scwx-qt/source/scwx/qt/request/nexrad_file_request.cpp
Dan Paulat 5caf0edf95 Hold reference to radar product manager for duration of request
- Avoids early destruction and potential recursive mutex locking
2024-05-24 22:47:22 -05:00

55 lines
1.3 KiB
C++

#include <scwx/qt/request/nexrad_file_request.hpp>
#include <scwx/qt/config/radar_site.hpp>
namespace scwx
{
namespace qt
{
namespace request
{
static const std::string logPrefix_ = "scwx::qt::request::nexrad_file_request";
class NexradFileRequest::Impl
{
public:
explicit Impl(const std::string& currentRadarSite) :
currentRadarSiteId_ {currentRadarSite}
{
// Hold shared pointer to radar site for duration of reqest
currentRadarSite_ = config::RadarSite::Get(currentRadarSite);
}
~Impl() = default;
const std::string currentRadarSiteId_;
std::shared_ptr<config::RadarSite> currentRadarSite_ {};
std::shared_ptr<types::RadarProductRecord> radarProductRecord_ {nullptr};
};
NexradFileRequest::NexradFileRequest(const std::string& currentRadarSite) :
p(std::make_unique<Impl>(currentRadarSite))
{
}
NexradFileRequest::~NexradFileRequest() = default;
std::string NexradFileRequest::current_radar_site() const
{
return p->currentRadarSiteId_;
}
std::shared_ptr<types::RadarProductRecord>
NexradFileRequest::radar_product_record() const
{
return p->radarProductRecord_;
}
void NexradFileRequest::set_radar_product_record(
const std::shared_ptr<types::RadarProductRecord>& record)
{
p->radarProductRecord_ = record;
}
} // namespace request
} // namespace qt
} // namespace scwx