Nitpick: ly:spanner-bound grob name slur -> spanner.
[lilypond.git] / flower / interval-set.cc
blob49ad550bf9d5c42f81ba8f2a5c9a93ffec7bec1c
1 /*
2 interval-set.hh -- implement Interval_set
4 source file of the GNU LilyPond music typesetter
6 (c) 2004 Han-Wen Nienhuys <hanwen@xs4all.nl>
7 */
9 #include "interval-set.hh"
12 A union of intervals in the real line.
14 Abysmal performance (quadratic) for large N, hopefully we don't have
15 that large N. In any case, this should probably be rewritten to use
16 a balanced tree.
19 Interval_set::Interval_set ()
21 set_full ();
24 void
25 Interval_set::set_full ()
27 allowed_regions_.clear ();
28 Interval s;
29 s.set_full ();
30 allowed_regions_.push_back (s);
33 void
34 Interval_set::remove_interval (Interval rm)
36 for (vsize i = 0; i < allowed_regions_.size ();)
38 Interval s = rm;
40 s.intersect (allowed_regions_[i]);
42 if (!s.is_empty ())
44 Interval before = allowed_regions_[i];
45 Interval after = allowed_regions_[i];
47 before[RIGHT] = s[LEFT];
48 after[LEFT] = s[RIGHT];
50 if (!before.is_empty () && before.length () > 0.0)
52 allowed_regions_.insert (allowed_regions_.begin () + i, before);
53 i++;
55 allowed_regions_.erase (allowed_regions_.begin () + i);
56 if (!after.is_empty () && after.length () > 0.0)
58 allowed_regions_.insert (allowed_regions_.begin () + i, after);
59 i++;
62 else
63 i++;