]> git.donarmstrong.com Git - lilypond.git/blobdiff - flower/include/interval-set.hh
Run grand replace for 2015.
[lilypond.git] / flower / include / interval-set.hh
index fef00300e7ffa5b37f21df16c307bb6cde793061..84f6debb30a6a7839025e1f07a9fad30fdd6cadb 100644 (file)
@@ -1,32 +1,42 @@
-/* 
-  interval-set.hh -- declare Interval_set
-  
-  source file of the GNU LilyPond music typesetter
-  
-  (c) 2004 Han-Wen Nienhuys <hanwen@xs4all.nl>
-  
+/*
+  This file is part of LilyPond, the GNU music typesetter.
+
+  Copyright (C) 2004--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>
+
+  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 <http://www.gnu.org/licenses/>.
 */
 
 #ifndef INTERVAL_SET_HH
 #define INTERVAL_SET_HH
 
-#include "array.hh"
+#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
 {
-  Array<Interval> allowed_regions_;
-
+public:
   Interval_set ();
-  void set_full ();
-  void remove_interval (Interval rm);
+
+  static Interval_set interval_union (vector<Interval>);
+
+  vector<Interval> const &intervals () const { return intervals_; }
+  vector<Interval>::const_iterator upper_bound (Real x) const;
+  Real nearest_point (Real x, Direction dir = CENTER) const;
+  Interval_set complement () const;
+
+private:
+  vector<Interval> intervals_;
 };
 
 #endif /* INTERVAL_SET_HH */