.. _program_listing_file_applications_application.cc: Program Listing for File application.cc ======================================= |exhale_lsh| :ref:`Return to documentation for file ` (``applications/application.cc``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #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() : GetId(); config_ = config; Logger::Debug(fmt::format("Creating {}", name_), "Application"); if (config["frequency"]) frequency_ = config["frequency"].as(); } 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::Creator>& AssetFactory::GetRegistry() { return Registry(); } // Explicit template instantiation to ensure single registry across library boundaries template class AssetFactory; } // namespace lupnt