flood_fill_seed: Move flood_fill_line to the "caller"

This restructure allows us to unify "call" and "return_from_call".
This commit is contained in:
YAMAMOTO Takashi 2021-05-11 14:09:24 +09:00
parent 0b69940876
commit eadbc2caca

View file

@ -180,29 +180,21 @@ static void flood_fill_seed(struct quirc *q,
next_vars->left_up = x0; next_vars->left_up = x0;
next_vars->y = y0; next_vars->y = y0;
call:
vars = next_vars;
/*
* Note about inputs:
*
* - vars->left_up contains x value to look at.
* - vars->left_down is still a garbage here.
*/
/* Fill the extent */ /* Fill the extent */
flood_fill_line(q, vars->left_up, vars->y, from, to, flood_fill_line(q, next_vars->left_up, next_vars->y, from, to,
func, user_data, func, user_data,
&vars->left_up, &vars->right); &next_vars->left_up, &next_vars->right);
next_vars->left_down = next_vars->left_up;
call:
return_from_call:
vars = next_vars;
if (vars == last_vars) { if (vars == last_vars) {
return; return;
} }
vars->left_down = vars->left_up;
/* Seed new flood-fills */ /* Seed new flood-fills */
return_from_call:
if (vars->y > 0) { if (vars->y > 0) {
row = q->pixels + (vars->y - 1) * q->w; row = q->pixels + (vars->y - 1) * q->w;
@ -212,6 +204,16 @@ return_from_call:
next_vars = vars + 1; next_vars = vars + 1;
next_vars->left_up = vars->left_up; next_vars->left_up = vars->left_up;
next_vars->y = vars->y - 1; next_vars->y = vars->y - 1;
/* Fill the extent */
flood_fill_line(q,
next_vars->left_up,
next_vars->y, from, to,
func, user_data,
&next_vars->left_up,
&next_vars->right);
next_vars->left_down = next_vars->left_up;
goto call; goto call;
} }
vars->left_up++; vars->left_up++;
@ -227,6 +229,16 @@ return_from_call:
next_vars = vars + 1; next_vars = vars + 1;
next_vars->left_up = vars->left_down; next_vars->left_up = vars->left_down;
next_vars->y = vars->y + 1; next_vars->y = vars->y + 1;
/* Fill the extent */
flood_fill_line(q,
next_vars->left_up,
next_vars->y, from, to,
func, user_data,
&next_vars->left_up,
&next_vars->right);
next_vars->left_down = next_vars->left_up;
goto call; goto call;
} }
vars->left_down++; vars->left_down++;
@ -235,7 +247,7 @@ return_from_call:
if (vars > stack) { if (vars > stack) {
/* Restore the previous context */ /* Restore the previous context */
vars--; next_vars = vars - 1;
goto return_from_call; goto return_from_call;
} }
} }