Program Listing for File base_swarm_manager.hpp
↰ Return to documentation for file (cosm/pal/base_swarm_manager.hpp)
#pragma once
/*******************************************************************************
 * Includes
 ******************************************************************************/
#include <ticpp/ticpp.h>
#include <memory>
#include <string>
#include "rcppsw/common/common.hpp"
#include "rcppsw/er/client.hpp"
#include "rcppsw/math/config/rng_config.hpp"
#include "rcppsw/math/rng.hpp"
#include "rcppsw/types/timestep.hpp"
#include "cosm/cosm.hpp"
#include "cosm/pal/config/output_config.hpp"
/*******************************************************************************
 * Namespaces/Decls
 ******************************************************************************/
namespace fs = std::filesystem;
namespace cosm::pal {
/*******************************************************************************
 * Class Definitions
 ******************************************************************************/
class base_swarm_manager : public rer::client<base_swarm_manager> {
 public:
  base_swarm_manager(void);
  virtual void init(ticpp::Element& node) = 0;
  virtual void reset(void) = 0;
  virtual void pre_step(void) = 0;
  virtual void post_step(void) = 0;
  virtual void destroy(void) = 0;
  /* Not copy constructable/assignable by default */
  base_swarm_manager(const base_swarm_manager&) = delete;
  const base_swarm_manager& operator=(const base_swarm_manager&) = delete;
  rmath::rng* rng(void) { return m_rng; }
 protected:
  virtual void output_init(const cpconfig::output_config* config) RCPPSW_COLD;
  virtual void ndc_uuid_push(void) const = 0;
  virtual void ndc_uuid_pop(void) const = 0;
  virtual void mdc_ts_update(void) const = 0;
  void rng_init(const rmath::config::rng_config* config) RCPPSW_COLD;
  fs::path output_root(void) const { return m_output_root; }
  void timestep(const rtypes::timestep& t) { m_timestep = t; }
  const rtypes::timestep& timestep(void) const { return m_timestep; }
 private:
  /* clang-format off */
  rtypes::timestep m_timestep{0};
  fs::path         m_output_root{};
  rmath::rng*      m_rng{nullptr};
  /* clang-format on */
};
} /* namespace cosm::pal */