LEFT | RIGHT |
(no file at all) | |
1 /* | 1 /* |
2 This file is part of LilyPond, the GNU music typesetter. | 2 This file is part of LilyPond, the GNU music typesetter. |
3 | 3 |
4 Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl> | 4 Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl> |
5 | 5 |
6 LilyPond is free software: you can redistribute it and/or modify | 6 LilyPond is free software: you can redistribute it and/or modify |
7 it under the terms of the GNU General Public License as published by | 7 it under the terms of the GNU General Public License as published by |
8 the Free Software Foundation, either version 3 of the License, or | 8 the Free Software Foundation, either version 3 of the License, or |
9 (at your option) any later version. | 9 (at your option) any later version. |
10 | 10 |
11 LilyPond is distributed in the hope that it will be useful, | 11 LilyPond is distributed in the hope that it will be useful, |
12 but WITHOUT ANY WARRANTY; without even the implied warranty of | 12 but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
14 GNU General Public License for more details. | 14 GNU General Public License for more details. |
15 | 15 |
16 You should have received a copy of the GNU General Public License | 16 You should have received a copy of the GNU General Public License |
17 along with LilyPond. If not, see <http://www.gnu.org/licenses/>. | 17 along with LilyPond. If not, see <http://www.gnu.org/licenses/>. |
18 */ | 18 */ |
19 | 19 |
20 #ifndef INTERVAL_SET_HH | 20 #ifndef INTERVAL_SET_HH |
21 #define INTERVAL_SET_HH | 21 #define INTERVAL_SET_HH |
22 | 22 |
23 #include "std-vector.hh" | 23 #include "std-vector.hh" |
24 #include "interval.hh" | 24 #include "interval.hh" |
25 | 25 |
26 /* | 26 class Interval_set |
27 A union of intervals in the real line. | 27 { |
| 28 public: |
| 29 Interval_set (); |
28 | 30 |
29 Abysmal performance (quadratic) for large N, hopefully we don't have | 31 static Interval_set interval_union (vector<Interval>); |
30 that large N. In any case, this should probably be rewritten to use | |
31 a balanced tree. | |
32 */ | |
33 struct Interval_set | |
34 { | |
35 vector<Interval> allowed_regions_; | |
36 | 32 |
37 Interval_set (); | 33 vector<Interval> const &intervals () const { return intervals_; } |
38 void set_full (); | 34 vector<Interval>::const_iterator upper_bound (Real x) const; |
39 void remove_interval (Interval rm); | 35 Real nearest_point (Real x, Direction dir = CENTER) const; |
| 36 Interval_set complement () const; |
| 37 |
| 38 private: |
| 39 vector<Interval> intervals_; |
40 }; | 40 }; |
41 | 41 |
42 #endif /* INTERVAL_SET_HH */ | 42 #endif /* INTERVAL_SET_HH */ |
LEFT | RIGHT |