X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fmisc.cc;h=45a055f8a6bb4841b2028da33e4309683573dd7f;hb=a2991295b2c1fb36bec19de207161855ca3c1756;hp=946e27e4bb4025d8c88fc79da6c77e080cdb978f;hpb=1a66290a98e7de8d6d41485b5b71a9f7e1fe35c7;p=lilypond.git diff --git a/lily/misc.cc b/lily/misc.cc index 946e27e4bb..45a055f8a6 100644 --- a/lily/misc.cc +++ b/lily/misc.cc @@ -3,43 +3,67 @@ source file of the GNU LilyPond music typesetter - (c) 1997 Han-Wen Nienhuys + (c) 1997--2001 Han-Wen Nienhuys + Jan Nieuwenhuizen */ #include - -#include "item.hh" #include "misc.hh" -#include "moment.hh" +/* + Return the 2-log, rounded down + */ int -intlog2(int d) { - int i=0; - while (!(d&1)) { - d/= 2; - i++; +intlog2 (int d) +{ + assert (d); + int i=0; + while ((d != 1)) + { + d/= 2; + i++; } - assert (!(d/2)); - return i; + + assert (! (d/2)); + return i; } double -log_2(double x) { - return log (x) /log (2.0); +log_2 (double x) +{ + return log (x) /log (2.0); +} + + +static int +comp (Real const &a, Real const &b) +{ + return sign (a-b); } -#if 1 Interval -itemlist_width (const Array &its) +quantise_iv (Array positions, Real x) { - Interval iv ; - iv.set_empty(); - - for (int j =0; j < its.size(); j++){ - iv.unite (its[j]->width()); + positions.sort (comp); + Real period = positions.top () - positions[0]; + + int n = int ((x - positions[0]) / period); + Real frac = (x - positions[0]) - n * period; + while (frac < 0) + { + frac += period; + n --; + } + + Real px = frac + positions[0]; + assert (positions[0] <= px && px <= positions.top ()); + int i=0; + for (; i < positions.size () - 1; i++) + { + if (positions[i] <= px && px <= positions[i+1]) + break; } - return iv; -} -#endif + return Interval (positions[i] , positions[i+1]) + period * n; +}