X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/7a3a100990355eb757dc81106b5aac6daed0b8e1..52c11fc61cb2dd17d276c67aaaa522085389c39e:/src/kernel/lmm/maxmin.hpp diff --git a/src/kernel/lmm/maxmin.hpp b/src/kernel/lmm/maxmin.hpp index c64d4d68c3..e67337031e 100644 --- a/src/kernel/lmm/maxmin.hpp +++ b/src/kernel/lmm/maxmin.hpp @@ -6,14 +6,15 @@ #ifndef SURF_MAXMIN_HPP #define SURF_MAXMIN_HPP +#include "simgrid/kernel/resource/Action.hpp" #include "src/internal_config.h" -#include "src/kernel/resource/Action.hpp" #include "src/surf/surf_interface.hpp" #include "surf/surf.hpp" #include "xbt/asserts.h" #include "xbt/mallocator.h" #include "xbt/misc.h" #include "xbt/utility.hpp" + #include #include #include @@ -134,15 +135,6 @@ namespace lmm { /** @{ @ingroup SURF_lmm */ -/** - * @brief Solve the lmm system - * @param sys The lmm system to solve - */ -XBT_PUBLIC void lmm_solve(lmm_system_t sys); - -XBT_PUBLIC void lagrange_solve(lmm_system_t sys); -XBT_PUBLIC void bottleneck_solve(lmm_system_t sys); - /** Default functions associated to the chosen protocol. When using the lagrangian approach. */ XBT_PUBLIC void set_default_protocol_function(double (*func_f)(const Variable& var, double x), @@ -447,7 +439,7 @@ public: */ explicit System(bool selective_update); /** @brief Free an existing Linear MaxMin system */ - ~System(); + virtual ~System(); /** * @brief Create a new Linear MaxMin constraint @@ -520,7 +512,10 @@ public: void print() const; /** @brief Solve the lmm system */ - void solve(); + void lmm_solve(); + + /** @brief Solve the lmm system. May be specialized in subclasses. */ + virtual void solve() { lmm_solve(); } private: static void* variable_mallocator_new_f(); @@ -584,7 +579,8 @@ private: void remove_all_modified_set(); void check_concurrency() const; - template void solve(CnstList& cnst_list); + template void lmm_solve(CnstList& cnst_list); + public: bool modified; boost::intrusive::list, @@ -600,9 +596,7 @@ public: &Constraint::saturated_constraint_set_hook>> saturated_constraint_set; - simgrid::kernel::resource::ActionLmmListPtr keep_track; - - void (*solve_fun)(lmm_system_t self); + simgrid::kernel::resource::Action::ModifiedSet* modified_set_ = nullptr; private: bool selective_update_active; /* flag to update partially the system only selecting changed portions */ @@ -617,6 +611,28 @@ private: xbt_mallocator_t variable_mallocator; }; +class XBT_PUBLIC FairBottleneck : public System { +public: + explicit FairBottleneck(bool selective_update) : System(selective_update) {} + void solve() final { bottleneck_solve(); } + +private: + void bottleneck_solve(); +}; + +class XBT_PUBLIC Lagrange : public System { +public: + explicit Lagrange(bool selective_update) : System(selective_update) {} + void solve() final { lagrange_solve(); } + +private: + void lagrange_solve(); +}; + +XBT_PUBLIC System* make_new_maxmin_system(bool selective_update); +XBT_PUBLIC System* make_new_fair_bottleneck_system(bool selective_update); +XBT_PUBLIC System* make_new_lagrange_system(bool selective_update); + extern XBT_PRIVATE double (*func_f_def)(const Variable&, double); extern XBT_PRIVATE double (*func_fp_def)(const Variable&, double); extern XBT_PRIVATE double (*func_fpi_def)(const Variable&, double);