X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finterval-minefield.cc;h=ddd79186ed63870489384c4c79edd3e793bc51e8;hb=90e4d7057f3857da049dfda3d130017d4719bd6b;hp=5fe3414993f9fd61ef46082e955f6548bd145381;hpb=3bcfd69d91f52f70598f73719fbed7aa6eea8ad3;p=lilypond.git diff --git a/lily/interval-minefield.cc b/lily/interval-minefield.cc index 5fe3414993..ddd79186ed 100644 --- a/lily/interval-minefield.cc +++ b/lily/interval-minefield.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2011 Mike Solomon + Copyright (C) 2011--2015 Mike Solomon Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify @@ -19,7 +19,7 @@ */ #include "interval-minefield.hh" -#include "grob.hh" + Interval_minefield::Interval_minefield (Interval feasible_placements, Real bulk) { feasible_placements_ = feasible_placements; @@ -38,18 +38,18 @@ Interval_minefield::feasible_placements () return feasible_placements_; } - /* - forbidden_intervals_ contains a vector of intervals in which - the beam cannot start. it iterates through these intervals, - pushing feasible_placements_ epsilon over or epsilon under a - collision. when this type of change happens, the loop is marked - as "dirty" and re-iterated. +/* + forbidden_intervals_ contains a vector of intervals in which + the beam cannot start. it iterates through these intervals, + pushing feasible_placements_ epsilon over or epsilon under a + collision. when this type of change happens, the loop is marked + as "dirty" and re-iterated. - TODO: figure out a faster ways that this loop can happen via - a better search algorithm. - */ + TODO: figure out a faster ways that this loop can happen via + a better search algorithm. +*/ void -Interval_minefield::solve() +Interval_minefield::solve () { Real epsilon = 1.0e-10; bool dirty = false; @@ -58,8 +58,7 @@ Interval_minefield::solve() dirty = false; for (vsize i = 0; i < forbidden_intervals_.size (); i++) { - Direction d = DOWN; - do + for (DOWN_and_UP (d)) { Interval feasible_widened = Interval (feasible_placements_[d], feasible_placements_[d]); feasible_widened.widen (bulk_ / 2.); @@ -71,12 +70,11 @@ Interval_minefield::solve() || feasible_widened.contains (forbidden_intervals_[i][d]) || feasible_widened.contains (forbidden_intervals_[i][-d])) { - feasible_placements_[d] = forbidden_intervals_[i][d] + d * (epsilon + (bulk_ / 2)); + feasible_placements_[d] = forbidden_intervals_[i][d] + d * (epsilon + (bulk_ / 2)); dirty = true; } } - while (flip (&d) != DOWN); } } while (dirty); -} \ No newline at end of file +}