X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=flower%2Finclude%2Finterval-set.hh;h=84f6debb30a6a7839025e1f07a9fad30fdd6cadb;hb=47db9a3883d726ca53e2133a3b2298f78dd6a32e;hp=6a6ad9e3cb62e4fdba11331443e4b78d81e7fc5e;hpb=64313890b232c731d432e5b096f30bffc3f3756d;p=lilypond.git diff --git a/flower/include/interval-set.hh b/flower/include/interval-set.hh index 6a6ad9e3cb..84f6debb30 100644 --- a/flower/include/interval-set.hh +++ b/flower/include/interval-set.hh @@ -1,9 +1,20 @@ /* - interval-set.hh -- declare Interval_set + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2004--2015 Han-Wen Nienhuys - (c) 2004 Han-Wen Nienhuys + LilyPond is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + LilyPond is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with LilyPond. If not, see . */ #ifndef INTERVAL_SET_HH @@ -12,20 +23,20 @@ #include "std-vector.hh" #include "interval.hh" -/* - A union of intervals in the real line. - - Abysmal performance (quadratic) for large N, hopefully we don't have - that large N. In any case, this should probably be rewritten to use - a balanced tree. -*/ -struct Interval_set +class Interval_set { - std::vector allowed_regions_; - +public: Interval_set (); - void set_full (); - void remove_interval (Interval rm); + + static Interval_set interval_union (vector); + + vector const &intervals () const { return intervals_; } + vector::const_iterator upper_bound (Real x) const; + Real nearest_point (Real x, Direction dir = CENTER) const; + Interval_set complement () const; + +private: + vector intervals_; }; #endif /* INTERVAL_SET_HH */