Newer
Older
Automaton::Automaton() : alphabet(), grid(0,0), neighbourhoodRule(nullptr), transitionRule(nullptr) {}
Automaton::~Automaton() {
delete neighbourhoodRule;
delete transitionRule;
}
void Automaton::setAlphabet(const Alphabet& A) {
alphabet = A;
for(int i=0; i<static_cast<int>(grid.get_col()); ++i) {
for(int j=0; j<static_cast<int>(grid.get_rows()); ++j) {
}
void Automaton::setNeighborhoodRule(NeighborhoodRule* NR) {
delete neighbourhoodRule;
neighbourhoodRule = NR;
}
NeighborhoodRule* Automaton::getNeighborhoodRule() const {
return neighbourhoodRule;
}
void Automaton::setTransitionRule(TransitionRule* TR) {
delete transitionRule;
transitionRule = TR;
}
TransitionRule* Automaton::getTransitionRule() const {
return transitionRule;
}
void Automaton::setCell(const Coord& coord, unsigned int val) {
grid.set_cell(coord, val%alphabet.taille());
}
const Grid& Automaton::getGrid() const {
return grid;
}
void Automaton::setGrid(const Grid& G) {
grid = G;
unsigned int state;
for(int i=0; i<static_cast<int>(grid.get_col()); ++i) {
for(int j=0; j<static_cast<int>(grid.get_rows()); ++j) {
state = grid.get_state({i,j});
if(state >= alphabet.taille()) {
grid.set_cell({i,j}, state%alphabet.taille());
}
}
}
}
void Automaton::runOnce() {
Grid tempGrid(grid);
for(int i=0; i<static_cast<int>(grid.get_col()); ++i) {
for(int j=0; j<static_cast<int>(grid.get_rows()); ++j) {
tempGrid.set_cell({i, j}, transitionRule->getState(grid.get_state({i,j}),neighbourhoodRule->getNeighborhood(grid, {i, j}))%alphabet.taille());