]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/include/beam-scoring-problem.hh
Introduce Beam_scoring_problem::quant_range, for quickly filtering out
[lilypond.git] / lily / include / beam-scoring-problem.hh
index 8026f430612b8f8233f579b5c231cdaf7d2f136d..ba244589be8b7d3314b5b46e645a69e50c9f3abe 100644 (file)
 
 #include "interval.hh"
 #include "lily-proto.hh" 
+#include "lily-guile.hh" 
 #include "std-vector.hh" 
 #include "stem-info.hh" 
 #include "main.hh"  //  DEBUG_BEAM_SCORING
 
-// Unused for now.
 enum Scorers {
   // Should be ordered by increasing expensiveness.
   ORIGINAL_DISTANCE,
@@ -41,7 +41,6 @@ struct Beam_configuration
 {
   Interval y;
   Real demerits;
-
 #if DEBUG_BEAM_SCORING
   string score_card_;
 #endif
@@ -58,9 +57,11 @@ struct Beam_configuration
 // Comparator for a queue of Beam_configuration*.
 class Beam_configuration_less
 {
+public:
   bool operator() (Beam_configuration* const& l, Beam_configuration* const& r)
   {
-    return l->demerits < r->demerits;
+    // Invert
+    return l->demerits > r->demerits;
   }
 };
 
@@ -136,10 +137,20 @@ private:
   Real staff_radius;
   Drul_array<int> edge_beam_counts;
   Drul_array<Direction> edge_dirs;
+
+  // Half-open intervals, representing allowed positions for the beam,
+  // starting from close to the notehead to the direction of the stem
+  // end.  This is used for quickly weeding out invalid
+  // Beam_configurations.
+  Drul_array<Interval> quant_range;
   Real beam_translation;
 
   void init_stems ();
 
+  void one_scorer (Beam_configuration* config) const;
+  Beam_configuration *force_score (SCM inspect_quants,
+                                   const vector<Beam_configuration*> &configs) const;
+
   // Scoring functions:
   void score_forbidden_quants (Beam_configuration *config) const;
   void score_slopes_dy (Beam_configuration *config) const;