-
Franck Dary authoredFranck Dary authored
Strategy.hpp 1.14 KiB
#ifndef STRATEGY__H
#define STRATEGY__H
#include <string>
#include <vector>
class Config;
class Strategy
{
public :
using Movement = std::pair<std::string, int>;
static inline Movement endMovement{"", 0};
private :
class Block
{
private :
enum EndCondition
{
CannotMove
};
std::vector<EndCondition> endConditions;
std::vector<std::tuple<std::string,std::string,std::string,int>> movements;
private :
static EndCondition str2condition(const std::string & s);
public :
Block(std::vector<std::string> endConditionsStr);
void addMovement(std::string definition);
const std::string getInitialState() const;
bool empty();
Movement getMovement(const Config & c, const std::string & transition);
bool isFinished(const Config & c, const Movement & movement);
};
private :
std::string initialState{"UNDEFINED"};
std::vector<Block> blocks;
std::size_t currentBlock{0};
public :
Strategy(std::vector<std::string> definition);
Movement getMovement(const Config & c, const std::string & transition);
const std::string getInitialState() const;
void reset();
};
#endif