- if (boundary (ties, d, 0).dir_ == d
- && !boundary (specifications_, d, 0).has_manual_position_)
- for (int i = 1; i <= details_.multi_tie_region_size_; i++)
- {
- Tie_configuration_variation var;
- var.index_ = (d == DOWN) ? 0 : ties.size () - 1;
- var.suggestion_ = get_configuration (boundary (ties, d, 0).position_
- + d * i, d,
- boundary (ties, d, 0).column_ranks_,
- true);
- vars.push_back (var);
- }
+ Drul_array<Tie_configuration*> configs (0, 0);
+ do
+ {
+ const Tie_configuration &config = boundary (ties, d, 0);
+ if (config.dir_ == d
+ && !boundary (specifications_, d, 0).has_manual_position_)
+ {
+ Tie_configuration_variation var;
+ configs[d] = get_configuration (config.position_ + d * i, d,
+ config.column_ranks_,
+ true);
+ var.add_suggestion((d == DOWN) ? 0 : ties.size () - 1,
+ configs[d]);
+ vars.push_back (var);
+ }
+ }
+ while (flip (&d) != DOWN);
+ if (configs[LEFT] && configs[RIGHT])
+ {
+ Tie_configuration_variation var;
+ var.add_suggestion(0, configs[DOWN]);
+ var.add_suggestion(ties.size() - 1, configs[UP]);
+ vars.push_back (var);
+ }