#include #include #include #include #include "array.h" /* * Implements a linear search. */ int gol_is_live(struct gol_board *const state, int_least32_t x, int_least32_t y, char *is_live) { for (unsigned int i = 0; i < state->n; i += 2) { if (state->live_cells[i] == x && state->live_cells[i+1] == y) { *is_live = 1; return 1; } } *is_live = 0; return 1; } /* * Return values of 0 represent irrecoverable errors. 1 is a success. */ int gol_vivify(struct gol_board *const state, int_least32_t x, int_least32_t y) { int_least32_t *tmp_cells = NULL; size_t tmp_size = 0; if (state->n == state->size) { tmp_size = 2 * state->size; tmp_cells = malloc(tmp_size * sizeof(int_least32_t)); if (!tmp_cells) { return 0; } memcpy(tmp_cells, state->live_cells, state->size * sizeof(int_least32_t)); state->size = tmp_size; free(state->live_cells); state->live_cells = tmp_cells; } state->live_cells[state->n] = x; state->live_cells[state->n + 1] = y; state->n += 2; if (x > state->max_x) { state->max_x = x; } else if (x < state->min_x) { state->min_x = x; } if (y > state->max_y) { state->max_y = y; } else if (y < state->min_y) { state->min_y = y; } return 1; }