Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fix some more doc bugs
[simgrid.git] / include / simgrid / plugins / solar_panel.hpp
index a25f1ae..849c366 100644 (file)
 
 namespace simgrid::plugins {
 
+/** @ingroup plugin_solar_panel */
 class SolarPanel;
+/** @ingroup plugin_solar_panel */
 using SolarPanelPtr = boost::intrusive_ptr<SolarPanel>;
 XBT_PUBLIC void intrusive_ptr_release(SolarPanel* o);
 XBT_PUBLIC void intrusive_ptr_add_ref(SolarPanel* o);
 
-class SolarPanelModel : public kernel::resource::Model {
-  std::vector<SolarPanelPtr> solar_panels_;
-
-public:
-  explicit SolarPanelModel();
-
-  void add_solar_panel(SolarPanelPtr b);
-  void update_actions_state(double now, double delta) override;
-  double next_occurring_event(double now) override;
-};
-
 class SolarPanel {
 
-  friend SolarPanelModel;
-
-private:
-  static std::shared_ptr<SolarPanelModel> solar_panel_model_;
-
   std::string name_;
   double area_m2_;
   double conversion_efficiency_;
-  double solar_irradiance_w_per_m2_ ;
+  double solar_irradiance_w_per_m2_;
   double min_power_w_;
   double max_power_w_;
+  double power_w_ = -1;
 
-  double power_w_      = 0;
-  double last_updated_ = 0;
-
-  explicit SolarPanel(std::string name, double area_m2, double conversion_efficiency, double solar_irradiance_w_per_m2, double min_power_w, double max_power_w);
-  static void init_plugin();
+  explicit SolarPanel(std::string name, double area_m2, double conversion_efficiency, double solar_irradiance_w_per_m2,
+                      double min_power_w, double max_power_w);
   void update();
 
   std::atomic_int_fast32_t refcount_{0};
@@ -60,9 +44,12 @@ private:
   friend void intrusive_ptr_add_ref(SolarPanel* o) { o->refcount_.fetch_add(1, std::memory_order_relaxed); }
 #endif
 
-public:
+  static xbt::signal<void(SolarPanel*)> on_power_change;
+  xbt::signal<void(SolarPanel*)> on_this_power_change;
 
-  static SolarPanelPtr init(const std::string& name, double area_m2, double conversion_efficiency, double solar_irradiance_w_per_m2, double min_power_w, double max_power_w);
+public:
+  static SolarPanelPtr init(const std::string& name, double area_m2, double conversion_efficiency,
+                            double solar_irradiance_w_per_m2, double min_power_w, double max_power_w);
 
   SolarPanelPtr set_name(std::string name);
   SolarPanelPtr set_area(double area_m2);
@@ -71,14 +58,20 @@ public:
   SolarPanelPtr set_min_power(double power_w);
   SolarPanelPtr set_max_power(double power_w);
 
-  std::string get_name() { return name_; }
-  const char* get_cname() { return name_.c_str();}
-  double get_area() { return area_m2_;}
-  double get_conversion_efficiency() { return conversion_efficiency_; }
-  double get_solar_irradiance() { return solar_irradiance_w_per_m2_; }
-  double get_min_power() { return min_power_w_; }
-  double get_max_power() { return max_power_w_; }
-  double get_power() { return power_w_; }
+  std::string get_name() const { return name_; }
+  const char* get_cname() const { return name_.c_str(); }
+  double get_area() const { return area_m2_; }
+  double get_conversion_efficiency() const { return conversion_efficiency_; }
+  double get_solar_irradiance() const { return solar_irradiance_w_per_m2_; }
+  double get_min_power() const { return min_power_w_; }
+  double get_max_power() const { return max_power_w_; }
+  double get_power() const { return power_w_; }
+
+  /** Add a callback fired after this solar panel power changed. */
+  void on_this_power_change_cb(const std::function<void(SolarPanel*)>& func) { on_this_power_change.connect(func); };
+  /** Add a callback fired after a solar panel power changed.
+   * Triggered after the on_this_power_change function.**/
+  static void on_power_change_cb(const std::function<void(SolarPanel*)>& cb) { on_power_change.connect(cb); }
 };
 } // namespace simgrid::plugins
 #endif