void solve_cell(t_list *list, t_maze *data, t_generating *var) { int nb; nb = (data->type == PARFAIT) ? (1) : (0); if (data->type == IMPARFAIT) while (nb == 0) nb = my_rand() % 3; if (data->maze[var->x][var->y] == UNVISITED) { if (neighbour(data, var->x, var->y) > nb) { data->maze[var->x][var->y] = WALL; var->x = list->last->x; var->y = list->last->y; popback(list); while (list->last != NULL && neighbors_around(data, var->x, var->y) == KO) { var->x = list->last->x; var->y = list->last->y; popback(list); } } else data->maze[var->x][var->y] = VISITED; } }
int remove_even(void* data) { int val = *(int*)data; return (val % 2 == 0) ? LLIST_REMOVE : 0; } llist_iter(l, true, remove_even); int double_vals(void* data) { int* ival = data; *ival *= 2; return 0; } llist_iter(l, false, double_vals); assertEqual(l->size, 5); assertEqual(popback(l), 18); assertEqual(popback(l), 14); assertEqual(popback(l), 10); assertEqual(popback(l), 6); assertEqual(popback(l), 2); assertEqual(l->size, 0); llist_close(l); return 0; }; VLIB_SUITE(llist) = { VLIB_TEST(llist_basic), VLIB_TEST(llist_iteration), VLIB_END, };
INLINE T &addfront() { if (n==max_n) popback(); ++n; return items[--first%max_n]; }