X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/7129abc5fe14ea134a324c934c9da748fe6544a6..3907e83884bae6278656e9cd2cb7ef92a8f707fb:/include/simgrid/plugins/solar_panel.hpp diff --git a/include/simgrid/plugins/solar_panel.hpp b/include/simgrid/plugins/solar_panel.hpp index b9097b416f..849c366c1f 100644 --- a/include/simgrid/plugins/solar_panel.hpp +++ b/include/simgrid/plugins/solar_panel.hpp @@ -11,42 +11,25 @@ namespace simgrid::plugins { +/** @ingroup plugin_solar_panel */ class SolarPanel; +/** @ingroup plugin_solar_panel */ using SolarPanelPtr = boost::intrusive_ptr; 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 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 solar_panel_model_; - std::string name_; double area_m2_; double conversion_efficiency_; double solar_irradiance_w_per_m2_; double min_power_w_; double max_power_w_; - - double power_w_ = 0; - double last_updated_ = 0; + double power_w_ = -1; 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(); void update(); std::atomic_int_fast32_t refcount_{0}; @@ -61,6 +44,9 @@ private: friend void intrusive_ptr_add_ref(SolarPanel* o) { o->refcount_.fetch_add(1, std::memory_order_relaxed); } #endif + static xbt::signal on_power_change; + xbt::signal on_this_power_change; + 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); @@ -72,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& 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& cb) { on_power_change.connect(cb); } }; } // namespace simgrid::plugins #endif