Add initial radar site model

This commit is contained in:
Dan Paulat 2022-10-06 23:23:22 -05:00
parent b6e7c829ee
commit 60a85a6b14
5 changed files with 189 additions and 4 deletions

View file

@ -4,6 +4,7 @@
#include <scwx/util/logger.hpp>
#include <format>
#include <shared_mutex>
#include <unordered_map>
namespace scwx
@ -22,6 +23,7 @@ static const std::string defaultRadarSiteFile_ =
static std::unordered_map<std::string, std::shared_ptr<RadarSite>>
radarSiteMap_;
static std::unordered_map<std::string, std::string> siteIdMap_;
static std::shared_mutex siteMutex_;
static bool ValidateJsonEntry(const boost::json::object& o);
@ -53,7 +55,7 @@ public:
RadarSite::RadarSite() : p(std::make_unique<RadarSiteImpl>()) {}
RadarSite::~RadarSite() = default;
RadarSite::RadarSite(RadarSite&&) noexcept = default;
RadarSite::RadarSite(RadarSite&&) noexcept = default;
RadarSite& RadarSite::operator=(RadarSite&&) noexcept = default;
std::string RadarSite::type() const
@ -116,6 +118,7 @@ std::string RadarSite::location_name() const
std::shared_ptr<RadarSite> RadarSite::Get(const std::string& id)
{
std::shared_lock lock(siteMutex_);
std::shared_ptr<RadarSite> radarSite = nullptr;
if (radarSiteMap_.contains(id))
@ -126,9 +129,25 @@ std::shared_ptr<RadarSite> RadarSite::Get(const std::string& id)
return radarSite;
}
std::vector<std::shared_ptr<RadarSite>> RadarSite::GetAll()
{
std::shared_lock lock(siteMutex_);
std::vector<std::shared_ptr<RadarSite>> radarSites;
radarSites.reserve(radarSiteMap_.size());
for (const auto& site : radarSiteMap_)
{
radarSites.push_back(site.second);
}
return std::move(radarSites);
}
std::string GetRadarIdFromSiteId(const std::string& siteId)
{
std::string id = "???";
std::shared_lock lock(siteMutex_);
std::string id = "???";
if (siteIdMap_.contains(siteId))
{
@ -156,6 +175,8 @@ size_t RadarSite::ReadConfig(const std::string& path)
if (dataValid)
{
std::unique_lock lock(siteMutex_);
for (auto& v : j.as_array())
{
auto& o = v.as_object();

View file

@ -2,6 +2,7 @@
#include <memory>
#include <string>
#include <vector>
namespace scwx
{
@ -18,7 +19,7 @@ public:
explicit RadarSite();
~RadarSite();
RadarSite(const RadarSite&) = delete;
RadarSite(const RadarSite&) = delete;
RadarSite& operator=(const RadarSite&) = delete;
RadarSite(RadarSite&&) noexcept;
@ -33,7 +34,8 @@ public:
std::string place() const;
std::string location_name() const;
static std::shared_ptr<RadarSite> Get(const std::string& id);
static std::shared_ptr<RadarSite> Get(const std::string& id);
static std::vector<std::shared_ptr<RadarSite>> GetAll();
static void Initialize();
static size_t ReadConfig(const std::string& path);