Program Listing for File lunanet_sat_app.h

Return to documentation for file (applications/lunanet_sat_app.h)

#pragma once

#include <string>
#include <utility>
#include <vector>

#include "lupnt/applications/application.h"
#include "lupnt/core/definitions.h"

namespace lupnt {

  class LunaNetSatApp;

  class LunaNetSubApp {
  public:
    LunaNetSubApp() = default;
    explicit LunaNetSubApp(std::string name) : name_(std::move(name)) {}
    virtual ~LunaNetSubApp() = default;

    virtual void Setup(LunaNetSatApp& app);
    virtual void Step(Real t) = 0;
    virtual void Finish();

    const std::string& GetName() const { return name_; }
    void SetName(std::string name) { name_ = std::move(name); }

  protected:
    std::string name_ = "lunanet_subapp";
  };

  class LunaNetSatApp : public Application {
  public:
    LunaNetSatApp() = default;
    explicit LunaNetSatApp(Config& config);

    void AddSubApp(Ptr<LunaNetSubApp> app);
    const std::vector<Ptr<LunaNetSubApp>>& GetSubApps() const { return sub_apps_; }

    void Setup() override;
    void Step(Real t) override;
    void Finish();

  private:
    std::vector<Ptr<LunaNetSubApp>> sub_apps_;
  };

}  // namespace lupnt