Skip to content
Snippets Groups Projects
Strategy.hpp 882 B
Newer Older
  • Learn to ignore specific revisions
  • Franck Dary's avatar
    Franck Dary committed
    #ifndef STRATEGY__H
    #define STRATEGY__H
    
    #include "Config.hpp"
    
    
    Franck Dary's avatar
    Franck Dary committed
    class Strategy
    {
    
    Franck Dary's avatar
    Franck Dary committed
      public :
    
      static inline std::pair<std::string, int> endMovement{"", 0};
    
    
    Franck Dary's avatar
    Franck Dary committed
      private :
    
      enum Type
      {
        Incremental,
        Sequential
      };
    
      Type type;
    
    Franck Dary's avatar
    Franck Dary committed
      std::map<std::pair<std::string, std::string>, std::pair<std::string, int>> edges;
    
    Franck Dary's avatar
    Franck Dary committed
      std::map<std::string, bool> isDone;
      std::vector<std::string> defaultCycle;
    
      std::string initialState{"UNDEFINED"};
    
    Franck Dary's avatar
    Franck Dary committed
    
      private :
    
      std::pair<std::string, int> getMovementSequential(const Config & c, const std::string & transition);
      std::pair<std::string, int> getMovementIncremental(const Config & c, const std::string & transition);
    
    Franck Dary's avatar
    Franck Dary committed
    
      public :
    
      Strategy(const std::vector<std::string_view> & lines);
      std::pair<std::string, int> getMovement(const Config & c, const std::string & transition);
    
      const std::string getInitialState() const;
    
    Franck Dary's avatar
    Franck Dary committed
    #endif