Antares_Simulator icon indicating copy to clipboard operation
Antares_Simulator copied to clipboard

Simplification of of ISimulation design

Open sylvlecl opened this issue 1 year ago • 1 comments

Description

Class ISimulation has a complex design for no added value: it inherits from a template implementation type, which contract is not explicit.

Instead, we should use a very simple design with composition:

class Simulation {
public:
...
private:
    std::unique_ptr<SimulationImpl> implementation;
};

class SimulationImpl {
public:
    virtual void setNbPerformedYearsInParallel(uint nbMaxPerformedYearsInParallel) = 0;
    bool simulationBegin() = 0;
    bool year(Progression::Task& progression,
              Variable::State& state,
              uint numSpace,
              yearRandomNumbers& randomForYear,
              std::list<uint>& failedWeekList,
              bool isFirstPerformedYearOfSimulation) = 0;
    void incrementProgression(Progression::Task& progression) = 0;
    void simulationEnd() = 0;
    void prepareClustersInMustRunMode(uint numSpace) = 0;
    void initializeState(Variable::State& state, uint numSpace) = 0;
};

class Economy : public SimulationImpl {
...
};
class Adequacy : public SimulationImpl {
...
};

sylvlecl avatar Aug 10 '23 13:08 sylvlecl