Program Listing for File application.cc¶
↰ Return to documentation for file (applications/application.cc)
#include "lupnt/applications/application.h"
#include "lupnt/agents/agent.h"
#include "lupnt/core/asset_factory.h"
#include "lupnt/core/error.h"
#include "lupnt/core/logger.h"
#include "lupnt/core/simulation.h"
#include "lupnt/devices/device.h"
#include "lupnt/interfaces/yaml.h"
namespace lupnt {
// Application
Application::Application(Config& config) {
name_ = config["name"] ? config["name"].as<std::string>() : GetId();
config_ = config;
Logger::Debug(fmt::format("Creating {}", name_), "Application");
if (config["frequency"]) frequency_ = config["frequency"].as<Real>();
}
void Application::Setup() {
Logger::Debug(fmt::format("Setting up {}", name_), "Application");
// Schedule
if (frequency_ > 0.0) {
agent_->GetSimulation()->Schedule(
0.0, [this](Real t) { Step(t); }, frequency_, Event::Priority::APPLICATION);
Logger::Info(fmt::format("Scheduled {}, t={} s, f={} Hz", name_, 0.0, frequency_), "Agent");
} else {
Logger::Warn(fmt::format("No frequency set for {}", name_), "Agent");
}
}
void Application::Log(Real t) {
Logger::Debug(fmt::format("Logging {}", name_), "Application", t);
}
// Define the GetRegistry function for this specialization (must come before explicit
// instantiation)
template <> std::unordered_map<std::string, AssetFactory<Application, Config&>::Creator>&
AssetFactory<Application, Config&>::GetRegistry() {
return Registry();
}
// Explicit template instantiation to ensure single registry across library boundaries
template class AssetFactory<Application, Config&>;
} // namespace lupnt